小白学JAVA,与你们感同身受,JAVA---day5:关于多态的理解和分析。鲁迅的一句话:总之岁月漫长,然而值得等待。

鲁迅的一句话:总之岁月漫长,然而值得等待。

至于是不是他说的,就看大家的了。

/*
多态:事物存在的多种形态。
多态的前提:
1.要有继承关系。
2.要有方法的重写。
3.要有父类引用指向子类对象。


向上转型和向下转型:
1.父类引用指向子类对象    向上转型。由小变大
2.向下转型。由大变小,要用到强制类型转换。
3.一定要先有向上转型再有向下转型。

多态的好处和弊端:
好处:
1.提高了代码的可维护性(继承保证)和扩展性(多态保证)。
弊端:不能使用子类特有的属性和行为。

作为参数时,用到instanceof关键字来判断前边的引用是否是后面的数据类型。      


抽象类:abstract关键字
abstract class{}
public abstract void eat();
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类或接口。
抽象类是不能实例化的,要有具体的子类实例化按照多态的方式。


抽象类:
1.成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量。
2.成员方法:可以是抽象,也可以是非抽象。
3.构造方法:有。
成员方法的特点:
抽象方法是强制子类要做的方法。
非抽象方法是子类继承的,提高了代码的复用性。    


 */

abstract class Animal{
    public abstract void eat();
}
class Cat extends Animal{
    
    public void eat(){
        System.out.println("吃饭");
    }
}

class day5{
    public static void main(String[] args) {
        /*
        Father f=new Son();              //父类引用指向子类对象    向上转型。由小变大
        
        System.out.println(f.num);       //对于成员变量,编译看左边(父类),运行看左边(父类)。
        f.print();                         //对于成员方法,编译看左边(父类),运行看右边(子类)。   动态绑定。  
        f.aim();                         //对于静态方法,编译看左边(父类),运行看左边(父类)。        
        System.out.println(new Son().num);*/
        /*
        Son s=(Son)f;                      //向下转型。由大变小,要用到强制类型转换。
        s.print();                      
        Animal a=new Cat();
        a.eat();
       
        if(a instanceof Cat){
            Dog c=(Dog)a;                    //ClassCastException: Cat cannot be cast to Dog  
            c.eat();
        }           
        else a.eat();  */
        Cat c=new Cat();
        c.eat();
    }
}
/*
class Animal{
    public void eat(){
        System.out.println("动物吃饭");
    }
}
class Cat extends Animal{
    public void eat(){
        System.out.println("猫吃鱼");
    }
}
class Dog extends Animal{
    public void eat(){
        System.out.println("狗吃水");
    }
}
class Father{
    int num =10;
    public void print(){
        System.out.println("父类");
    }
        static void aim(){
        System.out.println("父类静态运行");
    }
}
class Son extends Father{
    int num=20;
    public void print(){
        System.out.println("子类");
    }
        static void aim(){
        System.out.println("子类静态运行");
    }
}*/

猜你喜欢

转载自blog.csdn.net/yang13563758128/article/details/83926330