zoukankan      html  css  js  c++  java
  • 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类

    每个子类都可以覆写父类的方法
    如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误
    如果去掉父类的方法,就失去了多态的特性
    可以把父类的方法声明为抽象方法。
    如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法:

    • 抽象方法用abstract修饰
    • 抽象方法没有任何执行语句
    • 因为无法执行抽象方法,因此这个类也必须声明为抽象类abstract class
    • 无法实例化一个抽象类。如果子类不是抽象类,依旧可以被实例化。

    抽象类作用:

    • 抽象类用于被继承
    • 抽象类可以强迫子类实现其定义的抽象方法,否则编译错误
    • 抽象方法实际上相当于定义了规范。

    面向抽象编程的本质:

    • 上层代码只定义规范 abstract class Person
    • 不需要子类就可以实现业务逻辑(正常编译)
    • 具体的业务逻辑由不同的子类实现,调用者并不关心
      Shape.java
    public abstract class Shape {
        //抽象方法,用于计算面积
        public abstract double area();
    }
    

    Rect.java

    public class Rect extends Shape{
        private final double width;
        private final double height;
        public Rect(double width, double height){
            this.height = height;
            this.width = width;
        }
        @Override
        public double area() {
            return width * height;
        }
    }
    

    Circle.java

    public class Circle extends Shape{
        private double radius;
        public Circle(double radius){
            this.radius = radius;
        }
        @Override
        public double area() {
            return Math.PI * radius * radius;
        }
    }
    

    Hello.java

    public class Hello {
        public static void main(String[] args){
            Shape s1 = new Rect(200,100);
            Shape s2 = new Circle(60);
            System.out.println(s1.area());
            System.out.println(s2.area());
        }
    }
    

    总结:

    • 抽象方法定义了子类必须实现的接口规范
    • 定义了抽象方法的类就是抽象类
    • 从抽象类继承的子类必须实现抽象方法
    • 如果不实现抽象方法,该子类仍是一个抽象类
  • 相关阅读:
    SparkSQL & Spark on Hive & Hive on Spark
    Elasticsearch和Scala类型转换
    Java和Scala容器转换
    Spark应用远程调试
    scala下划线的用法
    Maven打包方式
    安装ElasticSearch遇到的深坑
    SparkSQL JDBC和JDBCServer区别
    source命令用法:source FileName
    System.getProperty()
  • 原文地址:https://www.cnblogs.com/csj2018/p/10274609.html
Copyright © 2011-2022 走看看