方法的重写又称方法的覆盖,一般用于子类根据需要可以对父类中的方法进行重新编写
重写的前提是:必须在继承体系下,也就是必须存在继承关系
重载的前提是:同一个类中
为什么使用重写?
父类中的方法不能满足子类的需要。
1:方法重写的原则
-
方法名必须相同
-
参数列表必须相同
-
返回值类型相同或者是其子类
-
访问权限相同或不能严于父类
注意:
-
一般不会去改变返回值和访问权限
-
父类的私有方法不能被重写,重写的是可以被继承的方法
-
一般情况下,重写都是会存在一模一样的方法仅仅是方法体不一样。
-
只能重写继承来的方法
2:方法重写和重载的区别
重载:同类同名不同参,与其他无关(同一个类中,方法名,参数列表不同--个数不同,类型不同,顺序不同)
重写:在子类和父类中存在,同名同参同返回值同访问修饰符的方法(返回值可以是其子类,访问修饰符不能比父类更 严格)简单来说就是方法体不同其他相同。
2、多态1、什么是多态
Pet p = new Dog(); // p 就是引用变量
在java中多态的体现? --- 》 所谓多态,就是指一个引用变量在不同的情况下的多种表现状态。也可以理解为,多态 是指通过指向父类的引用变量,来调用在不同子类中实现的方法。
注意:方法重写是实现多态的基础
java实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。
2、抽象类&抽象方法的定义
// 这就是一个抽象类
abstract class Animal {
String name;
int age;
// 动物会叫,不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性
public abstract void cry();
}
抽象类和普通类的区别?
- 抽象类不能被实例化,普通类可以
-
抽象类需要有abstract修饰,普通类不能
- 抽象类可以有抽象方法,普通类一定不能存在抽象方法
抽象方法和普通方法的区别?
- 抽象方法没有方法体,普通方法一定要有方法体
-
抽象方法一定要有abstract修饰,普通方法一定不能有
- 抽象方法只能在抽象类中,普通方法既可以在抽象类中也可以在普通类中
- 被继承时,抽象方法必须要被子类重写,普通方法没有要求
3、抽象方法介绍
如果父类中有一个方法,每一个子类都有不同的实现,此时可以将这个方法声明为抽象方法,抽象方法是没有方法体 的,只是一种规范。
什么是抽象方法:被abstract修饰的方法,就是抽象方法。
特征:
-
抽象方法没有方法体,只有方法的声明;
-
如果一个类中存在抽象方法,那么这个类必须声明为抽象类;abstact修饰的类,抽象类不能创建对象
-
抽象类不能被实例化;
-
抽象方法必须在子类中被重写,除非子类也是抽象类;
// 抽象类 abstract修饰 public abstract class Pet{ //抽象方法 public abstract void toHospital(); }
3、向上转型和向下转型
把子类对象直接赋给父类引用叫向上转型,向上转型不用强制转换。
<父类型> <引用变量名> = new <子类型>();
//Pet父类 Dog子类 Pet p = new Dog();
向上转型只能使用子类重写的一些方法,和从父类中继承的一些方法,如何使用自己独有的一些方法呢?可以使用 向下转型。 向下转型需要使用强制类型转换,调用子类特有的方法;
语法:
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
Dog dog=(Dog)pet;//将pet 转换为Dog类型 dog.method();//执行Dog特有的方法
在进行向下转型的时候,非常容易发生类型转换异常,
ClassCastException --- 类型转换异常
instanceof用于判断一个引用类型所引用的对象是否是一个类的实例



