一、子类与父类
object类是所有类的祖先类。
1、子类与继承 (1)关键字:extends class 子类名 extends 父类名{···}
(2)继承特性:java不支持多继承,一个子类只能有一个父类
同一包中:不继承private修饰的成员变量与方法
不同包中:只继承protected,public访问权限的成员方法
(3)子类继承的方法只能操作子类继承和隐藏的成员变量
2、子类与对象 (1) 使用子类的构造方法创建一个子类对象时
① 子类中声明的成员变量会被分配内存空间
② 父类的成员变量也都分配内存空间
③仅父类中可被继承的变量作为分配给子类对象的变量
子类不继承父类的构造方法,只能用super关键字调用
(2) instanceof运算符
A instanceof B;(对象A属于B类,则返回true)
3、 隐藏 (1)变量的隐藏:
子类声明的成员变量名与父类同名时(不考虑类型),子类 就会隐藏所继承的(属于父类)成员变量
(2) 方法的隐藏:(重写)
如果子类可以继承父类的某个方法,则子类也可以重写这个方法。
重写规则:相同:方法名、参数个数与类型完全相同
不同:方法体不同
重写父类的方法是访问权限不允许降低,只许提升。
二、关键字
1、super (1)子类隐藏的成员变量、方法归super所拥有
super.变量 (隐藏的变量)
super.方法 (该方法体中只能出现子类隐藏的或继承的变量)
(2) 调用父类的构造方法
当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的构造方法。如果子类的构 造方法没有明显的指明调用父类那个构造方法,就认为是调用默认的。
在子类的构造方法中用super()调用父类的构造方法。
必须是该方法中的第一条语句。
super()调用构造方法时先是父类的,再是其他类的,最后自己的。
2、final
final可修饰类,成员变量,方法中的局部变量
用final修饰一个类:final类不能被继承,既没有子类 用final修饰父类中一个方法,那么这个方法不能被继承。
用final修饰成员变量或局部变量:变成常量。(常 量在运行期间不能发生变化,必须有初值)
三、对象的上转型对象
1、声明 class father{} class son extend father{}
(1)father f;
f=new son(); //把子类创建的对象的引用放入父类的对象中
(2) father f;
son s=new son();
f=s; //把子类创建的对象的引用放入父类的对象中
2、特点
上转型对象不能操作自子类新增的成员变量与方法。
上转型对象可以访问子类继承的或隐藏的成员变量。
上转型对象可以调用子类继承的方法或重写的实例方法
3、注意
对于子类重写的
实例方法:上转型对象调用的是子类重写的那个。
静态方法:上转型对象调用的是父类中的那个。
四、abstract类与abstract方法
1、abstract方法
用abstract修饰的方法称为abstract方法(抽象方法)
只允许声明不允许实现,即方法体为空 : abstract int a(int x); //没有方法体和{}
不允许用final和abstract同时修饰一个方法
不允许static修饰abstract方法
2、abstract类
用abstract修饰的类称为abstract类(抽象类)
abstract类不能用new运算符创建对象
abstract类的子类
非abstract类:必须重写父类的abstract方法(去掉abstract修饰,并给出具体的方法体)
是abstract类:可以重写或继承父类的abstract方法
可做上转型对象