zoukankan      html  css  js  c++  java
  • 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是在构造方法中调用的

  • 相关阅读:
    【需求征集系统】打卡(五)
    【需求征集系统】打卡(五)
    《需求分析与系统设计》阅读笔记(一)
    每周总结【2020/10/24】————Redis与Mongodb初学
    【需求征集系统】打卡(四)
    【需求征集系统】打卡(三)
    初步自学Java小结
    关于“教室派”APP的使用报告和相关建议
    冲刺第一天
    结对开发之求环形数组的最大值
  • 原文地址:https://www.cnblogs.com/longesang/p/11217840.html
Copyright © 2011-2022 走看看