【171天】黑马程序员27天视频学习笔记【Day09】

叨逼叨两句

有些书吧,看第一页就会发现作者跟自己是一类人呢,这算是翻看《Thinking in Java》的第一印象了,那么抽象的描述,但是自己第一眼就喜欢上了,看来我选择做程序员这条路果然是对的,总算找到同类了。

09-(01-08):多态

多态概述

事物存在的多种形态

多态前提

  1. 要有继承关系
  2. 要有方法重写
  3. 要有父类引用指向子类对象

多态中的成员访问特点(重要!!!)

该部分值得再看看视频(09-02、09-03)

  1. 成员变量(勿论静态还是非静态)

    编译看左边(父类),运行看左边(父类)。
  2. 非静态成员方法

    编译看左边(父类),运行看右边(子类)。【动态绑定】
  3. 静态成员方法

    编译看左边(父类),运行看左边(父类)。

多态中的向上转型和向下转型

多态中,先向上转型,才能向下转型。

Animal a = new Dog();//向上转型 
Dog b = (Dog)a;//向下转型

多态的好处与弊端

  1. 弊端

    1. 不能直接使用子类特有的属性与方法,需要进行强制转换。
  2. 好处

    1. 提高了代码的维护性(继承保证)
    2. 提高了代码的扩展性(多态保证)【开发时很少在创建对象时将父类引用指向子类对象,直接用子类对象指向子类对象,可使用子类特有属性与方法,更方便,多态的应用主要是在于传递参数】

类型检测

instanceof使用方法

【171天】黑马程序员27天视频学习笔记【Day09】

09-(09-15):抽象类

抽象类的特点

  1. 抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
  2. 抽象类不能实例化,必须按照多态的方式,由具体的子类实例化,其实这也是多态的一种,抽象类多态。
  3. 抽象类的子类:要么是抽象类,要么重写抽象类中所有抽象方法。

抽象类的成员特点

  1. 成员变量:抽象类的成员变量可以是变量和常量,abstract不能修饰成员变量。
  2. 成员方法:抽象类的成员方法可以是抽象方法,也可以是非抽象方法
  3. 构造方法:有,用于子类访问父类数据的初始化。

应用场景

当你无法描述一个方法时,将它定义为抽象的.

注意事项

  1. 抽象类中如果没有抽象方法,能不能定义为抽象类?当然,它的目的只有一个,就是不让其他类创建本类对象,而是交给子类完成。
  2. abstract不能和哪些关键字共存?

    1. final:相互矛盾,被abstract修饰的方法和类分别需要被重写和继承,但final都不允许。
    2. static:被static修饰可以用类名调用,但是abstract没有方法体,用类名调用无意义。
    3. private:被abstract修饰是为了让子类看到并重写,而加上private就无法让子类看到了。

09-(16-17):接口

接口概述

  1. 从狭义角度:java中的interface。
  2. 从广义角度:对外提供规则的都是接口。【USB接口的例子举的精辟!!!另外老师关于一流公司卖规则、二流公司卖品牌、三流公司卖服务的观点超有启发性!!!解答了我的一个编程外的疑问!!!谢谢!!!】

接口特点

  1. 接口本身不能被实例化【因为调用内部没有方法体的抽象方法没有意义】,接口通过多态的方式实例化
  2. 接口的子类

    1. 抽象类:可以,但意义不大。
    2. 具体类:推荐,要重写所有抽象方法。

接口成员特点

  1. 成员变量:只能是常量,并且是静态和公共的,系统默认修饰符是public static final,他们三个没顺序要求。建议手动写下。
  2. 成员方法:只能是抽象方法,系统默认修饰符:public abstract,他们两个没顺序要求。建议手动写下。
  3. 构造方法:接口没有构造方法【别忘了每个类都有继承自Object】

09-18:类与类、类与接口、接口与接口的关系

  1. 类与类

    1. 继承关系,只能单继承,不能多继承。
  2. 类与接口

    1. 实现关系,可以单实现,也能多实现。
    2. 可以在继承一个类的同时,实现多个接口。
  3. 接口与接口

    1. 继承关系,可以单继承,也可以多继承。

09-19:抽象类与接口的区别

成员区别

  1. 抽象类

    1. 成员变量:可以是变量,也可以是常量。
    2. 成员方法:可以是抽象方法,也可以是非抽象方法
    3. 构造方法:有
  2. 接口

    1. 成员变量:只能是常量
    2. 成员方法:只能是抽象方法
    3. 构造方法:无

关系区别

同9-18

设计理念区别

  1. 抽象类:被继承体现的是“is a”的关系。抽象类中定义的是该继承体系的共性功能。
  2. 接口:被实现体现的是“like a”的关系,接口中定义的是该继承体系的扩展功能。

扩展阅读

区分继承(泛化)、实现、依赖、关联、聚合、组合
区分is-a(继承关系)、has-a(组合关系)、like-a(聚合关系)

09-20:练习

  1. 子类不会继承父类的构造方法,这个要子类自己写
  2. 子类初始化时,在其构造方法中用super将参数传给父类进行初始化,再用继承自父类的get方法取用即可。
package test_heima_08;

public class Test_Demo06 {
    public static void main(String[] args){
        Dog a = new Dog("mm",18);
        System.out.println(a.getName() + a.getAge());
    }
}

class Animal{
    private String name = "kk";
    private int age = 60;
    
    public Animal(){
        
    }
    
    public Animal(String name,int age){
        this.name = name;
        this.age = age;
    }
    
    public void setName(String name){
        this.name = name;
    }
    
    public String getName(){
        return name;
    }
    
    public void setAge(int age){
        this.age = age;
    }
    
    public int getAge(){
        return age;
    }
    
}

class Dog extends Animal{
    
    public Dog(){
        
    }
    
    public Dog(String name,int age){
        super(name,age);
    }
    
}

相关推荐