• 23 抽象类 abstract




    /*概念
      * abstract:关键字,用于修饰方法和类
      * 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法
      * 抽象类:有抽象方法的类必须是抽象类
    *
    * 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类
    */

    * 抽象类的特点:
      *抽象方法只能在抽象类里面

      * 抽象类和抽象方法必须被abstract修饰
      * 抽象类不能创建对象(不能实例化)
      * 抽象类中可以有非抽象的方法
      * 抽象类和类的关系也是继承
      * 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类

    * 抽象类的成员特点:
    * 成员变量
    * 可以有成员变量
    * 可以有常量
    * 成员方法
    * 可以有抽象方法
    * 可以有非抽象方法
    * 构造方法
    * 可以有构造方法的,需要对抽象类的成员变量进行初始化
    *
    * final:修饰类、成员变量、成员方法

    */


    public class AbstractDemo {
        public static void main(String[] args) {
            //抽象类不能创建对象(不能实例化)
    //    Animal a = new Animal();
            Cat c = new Cat();
            c.eat();
        }
    }
    
    abstract class Animal { //方法使用抽象方法后,类需要改为抽象类
        //猫吃鱼,狗吃草。都有eat方法,但是吃的东西不一样,这时需要使用抽象方法
        abstract public void eat();
    
    //    public void eat() {
    //        System.out.println("吃。。。");
    //    };
    }
    
    class Cat extends Animal {
        //继承了抽象类后方法和父类不同会报错,方法必须重新
    //   public void eat(String name) {
    //       System.out.println("猫吃鱼");
    //   }
    
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    abstract class Dog  extends Animal{
        //要么重新方法,要么类需要改为抽象类
        public void eat(String name) {
            System.out.println("狗吃草");
        }
    }

    输出

    package day2_抽象类;
    /*
     * 抽象类的成员特点:
     *         成员变量
     *             可以有成员变量
     *             可以有常量
     *         成员方法
     *             可以有抽象方法
     *             可以有非抽象方法
     *         构造方法
     *             可以有构造方法的,需要对抽象类的成员变量进行初始化
     *
     * final:修饰类、成员变量、成员方法
     */
    public class AbstractDmoe2 {
        public static void main(String[] args) {
            Dog2 d = new Dog2();
            d.brking();
            d.eat();
        }
    }
    
    abstract class Animal2 {
        String name = "哮天犬";
        final int num = 10; //final 修饰的变量是固定值,不可改变。
        public Animal2() { //抽象类可以有构造方法,因为需要对成员变量初始化。
            System.out.println("抽象类的无参构造");
        }
        public Animal2(String name) {
            System.out.println("抽象类有参构造");
        }
        public abstract void eat();
    }
    
    class Dog2 extends Animal2 {
    
        @Override
        public void eat() {
        }
    
        public void brking() {//
            System.out.println(name + "," + num);
        }
    }

    输出

    思考:能否在brking方法第一行加super或this?

    不能,super或this是在构造方法中调用的

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/longesang/p/11217840.html
Copyright © 2020-2023  润新知