JavaOOP基础(继承性和多态性)

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修饰对象,该对象的引用不能被改变,即首地址不能改。

你可能感兴趣的:(JavaOOP基础(继承性和多态性))