day12


面向对象多态

1.接口

接口是多个抽象方法的集合.仅仅定义功能,本身不实现功能.实现功能的过程交给类完成

接口中的方法是抽象方法,并不能实现功能.体现了规范和实现分离的思想.

public interface 接口名{
    抽象方法();
}

接口中的方法都是公共方法

类只能单继承,接口间可以继承接口,可以继承多个接口

1.2. 接口实现类

和抽象类一样,接口是不能创建对象的,必须定义一个类去实现接口,并覆盖接口中的方法,这个类称为实现类,类和接口之间的关系称之为实现关系.

接口:定义多个抽象方法,仅仅定义有哪些功能,却不提供实现,

实现类,实现接口中的抽象方法,完成功能具体的实现

public interface Test{
    void print();
}
//类A实现接口Test
class A implements Test{
    void print(){
        System.out.println("Hello World");
    }
}

接口与抽象类区别:
相同点: 都可以存在抽象方法
不同点:
抽象类是一种特殊的类 还是由class声明
接口是与类相似的一种接口 使用interface声明
抽象类中:成员变量 普通方法 构造方法(不能创建对象) 静态方法 抽象方法
模板: 共有的属性 方法 子类继承了抽象类 可以使用共有的属性方法
接口中:成员变量(必须赋值 public static final) 静态方法 抽象方法(默认缺省public abstract修饰)
规范:
接口:
和类相似的一种结构 主要提供规范
类与接口: 实现关系
1.一个类可以同时实现多个接口
2.一个类可以同时继承类和实现接口 但是继承关系必须放在实现关系前面
接口与接口: 多继承 多重继承

2. 多态

多态的作用:屏蔽子类之间的差异性,提高扩展性

多态性在Java中的体现是:

父类的引用指向子类的对象可以直接应用在抽象类和接口上

Java引用变量有两个类型:编译时类型和运行时类型:

编译时看左边,运行时看右边

若编译时类型和运动时类型不一致,就出现了对象的多态性

  • 看左边:看的是父类的引用(父类中不具备子类特有的方法)

  • 看右边:看的是子类的对象(实际运行的是子类重写父类的方法)

对象的多态-在Java中,子类对象可以替代父类的对象使用

一个变量只能有一种确定的数据类型

一个引用类型变量可能指向(引用)多种不同类型的对象

Person p = new Student();

Object o = new Person();

o = new Student();

子类可以看做是特殊的父类,所以父类类型的引用可以指向子类的对象,向上转型

一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法

public class Test{
    public void method(Person p){
        e.getInfo();
    }
    public static void main(String[] args){
        Test t = new Test();
        Student s = new Student();
        t.method(s);
    }
}

子类中定义了与父类同名同参数的方法,在多态情况下,此时将父类的方法称为虚拟方法,父类 根据赋给它的不同子类对象,动态调用属于子类的该方法,这样的低啊用在编译期是无法确定的

a instanceof A 判断a是否是A类的对象

通过字节码对象判断

对象名.getClass() == 类名.class

方法调用:先在本类中寻找,如果没有就去父类中寻找,一直找到object为止.


文章作者:
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 !
 上一篇
day13 day13
面向对象查漏补缺1. static修饰符static可以修饰: 普通方法 成员变量(字段) 被修饰的成员变量属于类 内部类 不可以修饰: 外部类 局部变量 构造方法 1.2 static的作用 避免对象被多次创建 需要几个对象有共享
2020-10-25
下一篇 
day11 day11
1. 继承(extends) 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只需要继承那个类即可. 此处的多个类称为子类(派生类),单独的这个类称为父类(超类,基类) 类继承语法 clas
2020-10-25
  目录