1、面向对象的第二大特性:继承性
(1)为什么要设计继承性?
(2)通过"class A extends B"来实现类的继承
子类:A 父类:B(基类Superclass)
(3)子类继承父类后,父类中声明的属性、方法,子类都可以获取到。
明确:当父类中有私有的属性或方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用罢了。
(4)子类除了通过继承获取父类的结构外,还可以定义自己特有的成份(属性和方法)。
(5)extends:继承。子类对父类功能的扩展,明确,子类不是父类的子集。
(6)java中类的继承只支持单继承,一个类只能继承一个父类。反之,一个父类可以有多个子类
Man m = new Man();
Person p = new Man();//1.向上转型(装箱)
(父) (子) //2.子类的对象赋给父类的引用
p(只有父类方法和子类重写方法)//3.父类的引用指向子类的对象
Man m1=(Man)p;//向下转型(拆箱)
if(p instanceof woman){
woman new_name=(woman)p;
}
2、面向对象的第三大特性:多态性
(1)多态指的是什么?多态可以理解为一种事物的多种形态。
(2)方法的重载与重写,属于多态的一种。明确java中的多态主要是指,子类对象的多态性。
(3)多态的使用前提:1、要有类的继承 2、要有子类对父类方法的重写
(4)对于多态来说:编译的时候看"左边",运行的时候看"右边"。
(5)
//子类的对象赋给父类的引用
//父类的引用指向子类的对象
person p = new man();
p.eat();
(6)当子类对象赋给父类的引用后,父类的引用只能调用父类的方法,不能调用子类中持有的方法,如果想调用子类中特有的方法,必须把父类的引用向下("拆箱")。
例:
Man m = (Man)p;
(7)如果把一个Man向上转型,转成一个Person类的对象p,然后把p向下转型一不小心把p转成了woman类的对象w;此时编译不会报错,但运行会报错。解决的办法:用instanceof关键字。
if(p instanceof man){
man new name = (man)p;
new name.eat();
new name.sleep();
}
3、方法的重载(overload)
要求:(1)同一个类中
(2)方法名必须相同
(3)方法的参数列表不同(1、参数的个数不同2、参数的类型不同)
(4)与方法的返回值无关
方法重载的详细说明:"两同一不同",同一个类下的方法或构造器,同一个方法名或构造器名,不同的参数列表。
4、方法的重写(overwrite)
(1)方法的重写有前提条件:有子类继承父类。
(2)子类继承父类后,若父类的方法对子类不适用,那么子类可以对父类的方法进行重写(overwrite)
(3)重写的规则:1、要求子类方法的"返回值类型 方法名(参数列表 )"与父类的方法一样
2、子类方法的修饰符不能小于父类方法的修饰符
3、若父类方法抛异常,那么子类方法抛异常的类型不能大于父类的。
4、子类的方法必需同为static或非static的
5、final关键字
(1)final修饰类,该类不能被继承。
(2)final修饰方法,该方法不能被重写。
(3)final修饰属性和变量,属性和变量的值不能被改变。
(4)final修饰对象,该对象的引用不能被改变,即首地址不能改。