javaSE 笔记 多态 + 抽象类 + 接口
多态
比较好的例子:
猫 cat = new 猫();
动物 animal = new 猫();
可以看到,猫对象,既能属于猫类,也能属于动物类。这就象征着不同的形态。
多态的前提和体现: 有继承/实现关系
有方法重写
有父类引用指向子类对象
多态中成员访问的特点: 成员变量:编译看左边,执行看左边,即看父类
成员方法:编译看左边,执行看右边,即看子类的重写方法。左边意思是父类中要先 定义一个成员方法,右边意思是子类要重写方法。
多态的好处:提高了程序扩展性,定义方法的时候,用父类型作为参数,使用的时候,使用具体的子类型参与操作进行传值。这样的话无论是Cat类,还是Dog类,Pig类,都只用写一次共同的方法,参数为父类的引用。 不然的话三个类对应动物操作类里,就得提供三个类的方法,以后每次添加一个动物,还得多增加一次,很麻烦。
多态的弊端:不能使用子类的特有功能。
多态的转型--为了使用子类的特有功能
向上转型 : 从子到父,父类引用指向子类对象,多态。
向下转型 : 从父到子,父类引用转(强制转换)为子类对象,使用子类的特有功能。 Cat c =(Cat)a
抽象类
1.跟virtual差不多,因为父类的方法不该写得很具体,有个形式就好了,只需要方便子类重写即可。那么父类的那个方法写成抽象方法就好了,public abstract eat(),但是因为只有抽象类才有抽象方法,所以还得改成public abstract class ...
2.抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。
3.抽象类不能实例化 ,不过可以参照多态的形式,通过子类继承父类,创建子类的对象,父类引用指向子类对象,如此父类的通用方法就能被子类继承过去用。另外父类的构造方法也是为了在子类对象调用父类变量或方法时构造用。
4.抽象类的子类,要么重写抽象类的抽象方法,要么其本身是一个抽象类。如果本身是抽象类,首先本身还可以继续地添加抽象方法,不过这些就都得孙子来还了,孙子自己想不成为抽象类,就必须重写之前所有的抽象方法。
抽象类的成员特点
似乎都是为了多态。。
关于构造方法,有构造方法,但是不能实例化,作用是子类访问父类数据的初始化
关于成员方法,可以有抽象方法,限定子类必须完成某些操作。
接口
接口是一种公共的规范标准,java的接口更多体现在对行为的抽象
接口用关键字修饰 public interface 接口名 {}
类与接口的关系是实现的关系,例:public class Cat implements Jumpping
接口不能实例化,也只能参照多态的方式,通过实现类对象实例化,这叫接口多态。
多态形式:具体类多态,抽象类多态,接口多态
接口的成员特点
1.没有成员变量这个说法,因为前面默认自带 public static final。注意静态的话,可以直接通过 接口名.变量名 调用,比如Inter.num3
2.接口不能有构造方法,也不能有方法实体,就算你写了一个方法,前面会自动地加上public abstract,但是一个类实现了接口的话,还是可以调用super()的,因为还是有父类的,默认继承自Object类。它是所有类的父亲。
接口只有有常量,抽象方法,感觉是纯粹地为了多态服务
类与接口的关系
1.类与类的关系:继承关系,只能单继承,但可以多层继承 public class Zi extends Fu
2.类与接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的时候多实现 public class Zi extends Object implements interface inter1, inter2, inter3
3.接口与接口的关系:可以单继承,也可以多继承 public interface inter1 extends inter2,inter3
抽象类与接口的区别
成员区别: 抽象类:可以当成是一个正常类,啥都有
接口:不太正常,只能有常量和抽象方法
关系区别:就看上面类与接口的关系
设计理念区别:抽象类:对类抽象,包括属性和行为
接口:对行为抽象,主要是行为

浙公网安备 33010602011771号