父类A a = new 子类B

首先什么是向上转型?

      向上转型是JAVA中的一种调用方式,是多态的一种表现。向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A的对象可访问B从A中继承来的和B复写A的方法,其它的方法都不能访问,包括A中的私有成员方法。

比如标题:

1、a实际上指向的是一个子类对象,所以可以访问Dog类从Animal类继承的方法sleep()和重写的方法eat()

2、由于向上转型,a对象会遗失和父类不同的方法,如methods();

     在向上转型的过程中,如果子类没有该方法,那么就会调用父类的方法,如果子类有重写该方法,那么会调用子类的方法;

举例说明:

class Animal{
	
    public void sleep(){
        System.out.println("Animal sleep");
    }
 
    public void eat() {
        System.out.println("Animal eat");
    }
}
 
class Dog extends Animal {
	
    public void eat() {
        System.out.println("dog eat meat");//重写父类方法
    }
    
    //子类定义了自己的新方法
    public void methods() {
        System.out.println("dog method");
    }
}
 
public class Demo {
 
    public static void main(String[] args) {
    	
        Animal a = new Dog();
        a.sleep();//Animal sleep
        a.eat();//dog eat meat
        
        //a.methods();	/*报错:The method methods() is undefined for the type Animal*/
    }
}

接下来看成员变量的访问特点:

因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特:

    一、使用父类类型的引用指向子类的对象;

    二、该引用只能调用父类中定义的方法和变量;

    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法(动态连接、动态调用)

    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

在现实生活中的体现:

      自己用自己的,儿子有父亲一样的,就用儿子的。省点钱是点。儿子独有的,父亲不会用,所以不能用

发布了241 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_40406929/article/details/102933509