• 继承与多态


    抽象类

    使用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绑定苹果还是香蕉还是其他水果;可扩充性:将来要新增一个子类,不用对父类与其他子类做出修改,降低了耦合性

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

  • 相关阅读:
    第01组 每周小结(3/3)
    第01组 每周小结(2/3)
    第01组 每周小结 (1/3)
    第01组 Beta冲刺总结
    第01组 Beta冲刺 (5/5)
    第01组 beta冲刺(4/5)
    第01组 beta冲刺(3/5)
    第01组 beta冲刺(2/5)
    第01组 Beta冲刺(1/5)
    latex Illegal, another ibstyle command
  • 原文地址:https://www.cnblogs.com/ming-szu/p/8907279.html
Copyright © 2020-2023  润新知