一、多态
a、定义:同一对象在不同时刻表现出来的不同形态(比如:猫是猫,也可以是动物,也就是 猫继承了动物类)所以可以通过动物类(父类)创建猫类(子类)。Animal t = new Animal(); Animal r = new Cat();
b、特点: 成员变量:编译看左边,执行看右边。 成员方法:编译看左边,执行看右边。这 是因为成员变量不可以重写,而方法子类可以重写,所以每次创建:Animal t = new Cat();都必须要判断子类中是否有重写的方法。 例如:Animal t = new Cat(); 对于成员变量:会 编译并且执行Animal中的成员变量,无论子类是否有同名的成员变量。 对于成员方法: 会 编译Animal中的方法,但会执行Cat()里的方法(属于重写方法)。
c、多态的转型:1、向上转型:把子类直接赋给父类对象的引用。刚刚说到,多态形成创建的 类:Animal t = new Cat();只能使用父类中的成员变量。看似创建了一个子类其实是有向上转型了。那怎样才能使用子类中的成员变量呢? 2、向下转型:将父类对象赋给子类。格 式为Cat c = (Cat) t 有点像强制类型转化; 之后 成员变量就是执行子类中的成员变量。
二、抽象类:
a、抽象类不能被实例化,所以不能被创建无论它是父类还是子类,只能被非抽象类的子类所 创建。
b、抽象类可以没有抽象方法,但有抽象方法的类必须是抽象类。(在类前加abstract) 例如: public static abstract class Animal {};
c、继承了抽象类的:1、非抽象类的子类必须写出父类中抽象类方法的方法体 比如:
2、抽象类的子类可以写出父类的中的抽象的方法方法体,也可以不写。这里有两个抽象方法 但下面的子类并没有全部重写也是可以的因为该子类是抽象类
d、成员特点: 抽象类父类中可有成员变量、常量(final),构造方法(主要用于初始化变量)、 强制子类完成某些操作。
三、接口(属于抽象类)
a、因为也属于抽象类,接口无法被实例化,具体创建过程如抽象类。
a、格式:public interface 接口名{};实现:public class 类名 implements 接口{};所以在写非 抽像类实现类中必须重写出接口中的抽象类方法。
b、成员特点: (接口类)
成员变量都只能是常量,也就是 int age = 0 等价于 public static final int age = 10; 所以在接口类中的成员变量必须初始化;
接口中没有构造方法和非抽象类方法,只能是抽象类方法
四、权限修饰符
a、权限修饰符有:public、private、default(默认的)、protect。
b、权限
在一个包中除了private只能在自己中使用,其他的都能在本包中使用。protect 不能在别的包中使用。
再新建一个包,并且导入之前的包,在新包中创建一个子类,在新包中的有关类(例如:子类继承了之前的包中的父类)可以使用旧包中的public 、default.无关类只能使用public.