zoukankan      html  css  js  c++  java
  • Java 抽象

    1.抽象的概念

     对于上面父类的图形,没法知道怎么计算面积的方法,不够具体,太抽象了,而对于子类每个图形(具体到每个图形),我们都知道怎么计算他们的面积

     动物吃什么,没法说,太抽象了,不够具体

    如果父类当中的方法不确定如何进行{}方法体的实现,那么这就应该是一个抽象方法

     2.抽象类和抽象方法

    (1)

    抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。

    抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。

     (2)如何使用抽象类和抽象方法

    • 不能直接创建new抽象类对象。

    • 必须用一个子类来继承抽象父类。
    • 子类必须覆盖重写抽象类父类中所有的抽象方法,即:子类去掉抽象方法的abstract关键字,然后补上方法体大括号

    • 创建子类对象进行使用

    (3)注意事项

    • 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。

     Fu.java

    public abstract class Fu {
        public Fu() {
            System.out.println("抽象父类构造方法执行!");
        }
        public abstract void eat();
    }
    

    Zi.java

    public class Zi extends Fu {
    
        public Zi() {
            // super();
            System.out.println("子类构造方法执行");
        }
    
        @Override
        public void eat() {
            System.out.println("吃饭饭");
        }
    }
    

    DemoMain.java

    public class DemoMain {
        public static void main(String[] args) {
            Zi zi = new Zi();
            zi.eat();
        }
    }

    可以看到父类构造方法先执行,然后是子类构造方法执行,为什么抽象父类的构造方法能执行,是因为子类中super()的执行

    • 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
    /*
    * 一个抽象类不一定包含抽象方法
    * 只要保证抽象方法所在的类是抽象类,即可
    * 这样没有抽象方法的抽象类,也不能直接创建对象,在一些特殊场景下有用途,如设计模式里面的适配器模式,就用到了。
    * */
    public class MyAbstract {
    }
    • 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错,除非该子类也是抽象类。理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

     如果子类也是个抽象类,可以看到下面的图中没有报错了。

    Animal.java

    Dog.java

    Dog2Ha.java

     

     DogGolden.java

     DemoMain.java

     

     运行结果:

     上面的案例,就是,父类是抽象类,子类也是抽象类,只有孙子类才是普通类

  • 相关阅读:
    登录注册页面切换
    LINUX系统日常使用命令
    find命令详解
    ssh命令详解
    tar命令详解
    route命令详解
    uname命令详解
    ps命令详解
    df命令详解
    virsh命令详解
  • 原文地址:https://www.cnblogs.com/GumpYan/p/13755370.html
Copyright © 2011-2022 走看看