方法的重写和多态

方法的重写:overriding

使用:当父类中的方法不能满足子类的需求

方法的重写又称方法的覆盖,一般用于子类根据需要可以对父类中的方法进行重写编写

重写的前提是:必须在继承体系下,也就是必须存在继承关系

重载的前提是:同一个类中

重写的原则:

1 方法名必须相同

2 参数列表必须相同

3 返回值类型相同或者是其子类

4 访问权限相同或者不能严于父类

注意:

1 一般不会去改变返回值和访问权限

2 父类的私有方法不能被重写,重写的是可以被继承的方法

3 一般情况下,重写都是会存在一模一样的方法 仅仅是方法体不一样

4 只能重写继承过来的方法

方法的重写和方法·的重载的区别:

重载:同类同名不同参,与其他无关(同一个类中 方法名相同 参数的个数 数据类型 顺序不同)

重写:在子类和父类中存在,同名同参同返回值类型同访问修饰符的方法(返回值可以是其子类 访问修饰符不能比父类更严格) 简单来说 就是一模一样

 

 多态

什么是多态:

Pet p = new Dog();//p就是引用变量

在java中多态的体现-->所谓多态 就是指一个引用变量在不同的情况下的多种编写状态,也可以理解为,多态是指通过指向父类的引用变量,来调用在不同再累中实现的方法。

注意:方法重写是实现多态的基础

多态的运用:

一般用于继承体系下,子类重写父类的某个方法,调用时根据具体的子类实现去调用子类的方法

抽象方法的介绍:

如果父类中有一个方法,每一个子类都有不同的实现,此时可以将这个方法声明为抽象方法,抽象方法是没有方法体的,只是一种规范

Pet类中的Tohospital()方法不需要具体的实现,而且实现后没有任何意义,此时可以将Pet类中的Tohospital()声明为抽象方法

什么是抽象方法:被abstract修饰的方法,就是抽象方法

特征:

1 抽象方法没有方法体 只有方法的声明

2 如果一个类中存在抽象方法 那么这个类必须声明为抽象类 abstract修饰的类,抽象类不能创建对象、

3 抽象类不能被实例化

4 抽象方法必须在子类中被重写 除非子类也是抽象类

 向上转型:

把子类对象直接赋给父类引用叫向上转型,向上转型不用强制转换

<父类型> 引用变量名 = new<子类型>()

如: Pet p = new Dog();

注意:

1 此时通过父类引用变量调用的方法是子类重写或继承父类的方法

2 此时通过傅雷引用变量无法调用子类特有的方法

向下转型  -- 强制类型转换

向上类型只能使用子类重写的一些方法 和父类中继承的一些方法 任何使用自己特有的一些方法呢?

可以使用向下转型

向下转型需要强制类型转换 调用子类特有的方法

语法:  <子类型> 引用变量名 = (<子类型>)<父类型的引用变量>

如: Dog dog = (Dog)Pet;//将pet转换为Dog类型

dog.method();//执行Dog特有的方法

在进行向下转型的时候 非常容易发生类型转换异常

ClassCastException --- 类型转换异常

instanceof用于判断一个引用类型所引用的对象是否是一个类的实例

 

posted @ 2021-11-29 20:17  秃头少女and战战  阅读(136)  评论(0编辑  收藏  举报