码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础之多态

时间:2019-10-28 14:47:12      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:double   编译   多态   cat   ide   继承   ati   代码量   test   

多态:父类的引用指向了子类的对象。因此在实现多态时一定要有继承的关系。

比如:

class Fu {

}

class Zi extends Fu {

}

Fu obj = new Zi();

使用多态的注意事项:一定要保证父类有此成员,否则编译无法通过。

(1)在访问成员变量时,实际上访问的也是父类的成员变量。

public class Demo {
    public static void main(String[] args) {
        Animal cat = new Cat();
        System.out.println(cat.weight);  // 20.0
    }
}

class Animal {
    double weight=20;

    
}

class Cat extends Animal {
    double weight=10;

}

(2)在访问非静态的成员方法时,实际上访问的是子类的成员方法。

public class Demo {
    public static void main(String[] args) {

        Father son = new Son();
        son.drive(); //坐公交车
    }
}

class Father {

    public void drive(){
        System.out.println("开小汽车");
    }
}

class Son extends Father {

    @Override
    public void drive() {
        System.out.println("坐公交车");
    }
}

(3)在访问静态的成员方法和成员属性时,实际上访问的是父类的方法和属性。

public class Demo {
    public static void main(String[] args) {
        Father f = new Son();
        f.say(); //I‘m father
    }
}

class Father {
    public static void say(){
        System.out.println("I‘m father.");
    }
}

class Son extends Father {

    public static void say(){
        System.out.println("I‘m son.");
    }
}

(4)多态经常会在方法的参数中使用,即形参是父类,实参是子类对象,这样在运行时会动态绑定,从而节省代码量。

public class Demo {
    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();
        cat.say();
        dog.say();
    }

    public static void test(Animal animal){
        animal.say();
    }

}


class Animal{
    public void say(){
        System.out.println("I‘m animal");
    }
}

class Cat extends Animal {
    public void say(){
        System.out.println("I‘m cat");
    }
}

class Dog extends Animal {
    public void say(){
        System.out.println("I‘m dog");
    }
}

(5)关于向上转型和向下转型。

public class Demo {
    public static void main(String[] args) {
        Fu obj = new Zi(); //向上转型
        Zi z = (Zi) obj; //向下转型,通过强制类型转换
    }
}

class Fu {
    
}

class Zi extends Fu {
    
}

但要注意,在向下转型时,一定要确保转换的对象的实际类型和子类相同,否则报错。

public class Demo {
    public static void main(String[] args) {
     
        Fu f = new Fu();
        Zi z = (Zi) f; //错误:Fu cannot be cast to Zi
    }
}

class Fu {

}

class Zi extends Fu {

}

(6)多态的缺点:在使用多态时,不能访问子类的独有的属性和方法(因为父类没有,无法通过编译)。

Java基础之多态

标签:double   编译   多态   cat   ide   继承   ati   代码量   test   

原文地址:https://www.cnblogs.com/liualex1109/p/11742549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!