继承与抽象类
一、继承
Java面向对象的编写方式有三大特性,封装、继承与多态,现总结关于继承的一些知识点。
1、继承体现在类与类之间的关系,Object为java所有类的父类
2、实现类的继承通过关键字extends来实现,如:class 子类 extends 父类 { //类体 }
3、类的单根性:一个类只能有一个父类,这点与C语言或C++不同,注意区分
4、当子类和父类在同一个包的时候:父类中的private修饰的成员无法被子类继承,其余成员可以被继承
当子类和父类不在同一包中:父类中的private和默认修饰的成员无法被继承,public和protected可以跨包继承;
5、继承的优点:提升代码的复用性,减少代码冗余
6、在Myeclipse中查看继承架构图的快捷键为ctrl +T ,查看类中所有成员快捷键为ctrl + O
7、native修饰符表示不是由java实现的,而是由其它语言比如C语言实现
8、final关键字:修饰常量(值不能被改变),修饰类(该类不能被继承,比如String和System),修饰方法(该方法不能被子类重写)
9、super:超类 super代表父类的对象
二、构造方法
1、构造方法的特点:方法名与类名完全相同 没有返回值类型
2、执行时机:当类在实例化过程中,会自动调用构造方法
3、构造方法的作用:完成类的变量的初始化工作
4、构造方法快捷键:alt+shirf+s generate constructor........
5、@Override:注解 标识的作用
6、子类在实例化的过程中,会先执行父类的无参构造函数super(),为隐式调用,带参构造必须显式调用,且必须写在第一行
三、抽象类
1、抽象类通过关键字abstract进行修饰
2、抽象类的内部可以存在抽象方法:(1)使用abstract关键字修饰 (2)抽象方法不能存在方法体 (3)抽象方法必须由子类重写,除非子类也是抽象类,则继续由子类的子类重写
3、抽象类即可存在抽象方法,又能存在非抽象方法
4、抽象类可以构造函数
四、类型转换
假设Animal类是Tiger类的父类,当用子类创建一个对象,并把对象的引用放在父类的对象中时,比如:
Animal a; a=new Person();
或
Animal a; Person b=new Person(); a=b;
我们称对象a是对象b的上转型对象(好比说“人是动物”)
上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。
1、上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
2、上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。
3、不要将父类创建的对象与子类对象的上转型对象混淆。
4、可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有的属性和功能。
5、不能将父类创建的对象的引用赋给子类声明的对象。
下例中,monkey是People类对象的上转型对象
class Monkey{ void crySpeak(String s){ System.out.println(s); } } class People extends Monkey{ void computer(int a ,int b){ int c=a*b; System.out.println(c); } void crySpeak(String s){ System.out.println("***"+s+"***"); } } public class lianxi { public static void main(String[] args) { Monkey monkey=new People(); monkey.crySpeak("I love this game"); People people=(People)monkey; people.computer(10, 10); } }
monkey调用的是子类重写的crySpeak。需要注意的是 monkey.computer(10,10);是错误的,因为该方法是子类新增的方法。
6、如果子类重写了父类的静态方法,那么子类对象的上转型对象不能调用子类重写的静态方法,只能调用父类的静态方法。