基本数据类型自动提升和强制类型转换
int i = 10;
byte b = 20;
i = b; //自动类型提升
b = (byte)i; //强制类型转换
向上转型和向下转型
Person P = new SuperMan(); //向下转型
SuperMan sm = (SuperMan)P; //向上转型
sm.fly()
多态的好处和弊端
好处:
- 提高代码的维护性(继承保证)(在继承的类里面改一下就好了)
- 提高代码的扩展性(多态保证)(定义一个父类,随着子类的不同执行不同的行为)
public class Test01 {
public static void main(String[] args){
Animal cat = new Cat();
Animal dog = new Dog();
// Cat c1 = (Cat) c;
// c1.catchMouse();
method(cat);
method(dog);
}
public static void method(Animal a){
a.eat();
if(a instanceof Cat){ //instanceof 判断前面的引用是否是后面的数据类型
((Cat) a).catchMouse();
}else if(a instanceof Dog){
((Dog) a).sleep();
}
}
}
class Animal{
public void eat(){
System.out.println("动物吃东西");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫捉老鼠");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("狗吃肉");
}
public void sleep(){
System.out.println("狗睡觉");
}
}
面试题
看下面的程序是否有问题:
public class Test02 {
public static void main(String[] args){
A a = new B();
a.show(); //爱
B b = new C();
b.show(); //你
}
}
class A {
public void show(){
show2();
}
public void show2(){
System.out.println("我");
}
}
class B extends A{
public void show2(){ //a.show(), 这里执行的是子类的show2()
System.out.println("爱");
}
}
class C extends B{
public void show(){
super.show(); //和上例一样,执行的是子类的show2()
}
public void show2(){
System.out.println("你");
}
}