一、方法重写
(1)什么是方法重写?
子类根据需求对从父类继承的方法进行重新编写;
重写时,可以用super.方法的方式来保留父类的方法;
构造方法不能被重写
(2)方法重写的规则
方法重写(要有继承关系(在继承的情况下,子类的方法满足以下条件)):
1.方法名相同、
2.参数列表相同、
3.返回值类型相同或者是父类返回值类型的子类、
4.访问修饰符的权限不能小于父类、
5.抛出的异常不能多于父类(严于)
(3)方法重写vs方法重载
二、object类
Object类是所有类的父类
public class Pet extends Object {
……
}
Object类被子类经常重写的方法
重写equals
public boolean equal(Object obj){
if (this==obj){
return true;
}
if (obj instanceof Pet){
Pet p=(Pet)obj;
//自定义比较规则
//如果宠物的名称相同,则认为是同一个对象
if (this.name!=null&&this.name.equals(p.name)){//名字相等则是相同
return true;
}
}
return false;
}
三、多态
多态:同一个对象有多种形态
作用:把不同的数据类型统一,让程序具有超强的可扩展性
小知识点:
1.把子类的对象赋值给父类的变量–向上转型
缺点:屏蔽掉子类中特有的方法
2.把父类的变量转化回子类的变量–向下转型
向下转型可能有风险,java要求必须进行强制转换
(转换之后的数据类型)变量
//猫是一种动物--》继承关系 //可以把猫当作动物来看public class cat extends animal{ public void eat(){ System.out.println("猫在吃鱼"); } public void catchMouse(){ System.out.println("猫抓老鼠"); }}
public class dog extends animal{
public void eat(){
System.out.println("狗在吃骨头");
}
public class animal {
public void eat(){
System.out.println("zaichi");
}
}
public class person {
public void feed(animal ani){//接收到的所有动物都是animal
ani.eat();
}
}
public class client {
public static void main(String[] args) {
// new cat();//创建一只猫
animal ani1=new cat();//可以把猫动作动物来看,把子类的对
// 象赋值给父类的引用(变量)向上转型,屏蔽掉子类的特有方法
animal ani2=new dog();
//类animal里面的方法貌似没有被执行
person p=new person();
p.feed(ani1);
//多态:吧不同的数据类型进行统一
//向下转型,需要进行强转
cat cc= (cat) ani1;
cc.catchMouse();//猫又可以抓老鼠
}
}
四、抽象方法
抽象:现实中不存在的东西
在java中:只声明,不实现
抽象方法:使用abstract来修饰,不可以有方法体,直接用分号结束
抽象类:如果一个类中有抽象方法,这个类必须是抽象类
特点:
1.抽象类不可以创建对象
2.抽象类的子类,必须重写父类的抽象方法,否则,子类必须是抽象类
通过抽象类可以强制的要求子类中必须有哪些方法。
小知识点:抽象类可以有正常的方法
五、向上转型与向下转型
1.把子类的对象赋值给父类的变量–向上转型
缺点:屏蔽掉子类中特有的方法
<父类型> <引用变量名> = new <子类型>();
2.把父类的变量转化回子类的变量–向下转型
向下转型可能有风险,java要求必须进行强制转换
(转换之后的数据类型)变量
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;