1.重写与重载的区别
重写:在子类中对父类中的方法进行重新书写代码,参数相同
重载:在一个类中对方法进行重写,参数可以不同
2.方法重写和方法重载的区别
3.Object
object类是所有类的父亲
4.object类的equals()方法
重写equals()(部分类例如String中已经重写过了)
5.多态
方法重写是实现多态的前提
这里Pet 是父类,Cat和Dog是子类
向上转型
子类指向父类(从右往左看)
//创建Dog类对象
//向上转型:父类的引用(对象名)指向子类的实例(对象)
Pet pet1 = new Dog("来福",100,99,"哈士奇");
//向上转型中,父类的引用调用方法的时候,先去指向的子类中查找有没有调用的这个方法,
//有,就调用,没有,就调用父类中的这个方法。调用的这个方法在子类中是重写后的方法
pet1.show();
//父类引用只能调用子类中重写的方法,不能调用子类中特有的方法,
//如果要调用,要将父类的引用转换为子类对象,需要进行强制类型转换(向下转型)
// pet1.eat();
向下转型(部分类似强转)
//向下转型:子类的引用(对象名)指向父类的引用(对象名)
Dog dog2 =(Dog)pet1;
dog2.eat();
System.out.println("==================================");
pet1 = new Cat("Tom",100,99,"蓝白色");
pet1.show();
//父类的引用无法调用子类中特有的方法,需要进行向下转型
// pet1.sleep();
// Cat cat2 = (Cat)pet1;
// cat2.sleep();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//在向下转型过程中,如果没有转换为对应的子类对象,会报类型转换异常,所以在转型之前对类型进行判断,使用instanceof运算符进行判断
//Dog dog3 = (Dog)pet1;//ClassCastException:类型转换异常
//dog3.eat();
if(pet1 instanceof Dog){
Dog dog3 = (Dog)pet1;
dog3.eat();
}else if(pet1 instanceof Cat){
Cat cat2 = (Cat)pet1;
cat2.sleep();
}
6.抽象类
抽象方法:使用abstract修饰的方法为抽象方法
1)抽象方法没有方法体
2)抽象方法所在的类要定义为抽象类
3)抽象方法在子类要进行重写,如果子类不重写父类中的抽象方法,子类也要定义为抽象类
抽象类:使用abstract修饰的类为抽象类
1)抽象类中可以有抽象方法,也可以没有抽象方法
2)抽象类中可以定义非抽象方法
3)抽象类不能实例化(不能通过new关键字来创建对象),但是可以通过多态的形式将抽象类的引用指向子类对象