继承与多态

抽象类

使用abstract修饰的类为抽象类

1.抽象类无法实例化,因为其中的抽象方法未实现,而继承它的子类必须实现父类所有的抽象方法

2.可以包含abstract修饰的抽象方法,也可以有无abstract的非抽象方法

package over;

public abstract class fruit {
    String name="fruit";
    int value;

    fruit(){}
    fruit(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public void tellName(){
        System.out.println("father::I am "+name+"!");
    };
    public abstract void tellPrice();

    public void say(){
        System.out.println("hello fruit!");
    }
}

 抽象类子类

必须实现父类的抽象方法

package over;

public class apple extends fruit {
    private int size;
    public apple(){};
    public apple(String name,int value,int size){
        super(name,value);
        this.size=size;
    };

    //实现父类抽象方法
    @Override
    public void tellPrice() {
        System.out.println("I am worth "+value);
    }


}

重写父类的非抽象方法与子类私有而父类没有的方法

package over;

public class apple extends fruit {
    private int size;
    public apple(){};
    public apple(String name,int value,int size){
        super(name,value);
        this.size=size;
    };

    //实现父类抽象方法
    @Override
    public void tellPrice() {
        System.out.println("I am worth "+value);
    }

    //重写父类方法
    public void tellName(){
        System.out.println("child::This is "+name);
    }
    
    //子类私有而父类没有的方法
    public void tellSize(){
        System.out.println("My size is"+size);
    }
}

 多态,向上转型

通过父类引用实例化的子类

        fruit apple1=new apple("apple",10,1);

 该引用所使用的方法父类都必须要有,在父类中找到后再从子类中查找,子类中有则使用,没有则使用父类自己实现的方法

测试

package over;

public class test {
    public static  void main(String argv[]){
        fruit apple1=new apple("apple",10,1);
        //调用抽象方法
        apple1.tellPrice();
        //调用子类覆盖重写的方法
        apple1.tellName();
        //调用子类没有而父类有的方法
        apple1.say();
    }
}

 子类中有而父类中没有的方法该引用是无法调用的

面试考点

1.覆盖与重载

  • 覆盖(Override)存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法;

  • 重载(Overload)存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。应该注意的是,返回值不同,其它都相同不算是重载。     

2.多态

 概念:类引用对象的具体类型与它调用的具体方法在编程时是不确定的,而在程序运行的时候才会被确定

条件:继承,重写,向上转型

优点:可以实现不修改程序代码,却能改变引用所绑定的具体对象与其具体方法;例如输入1234来确定将fruit绑定苹果还是香蕉还是其他水果;可扩充性:将来要新增一个子类,不用对父类与其他子类做出修改,降低了耦合性

缺点:子类的私有属性与方法引用是无法使用的

原文地址:https://www.cnblogs.com/ming-szu/p/8907279.html