zoukankan      html  css  js  c++  java
  • 抽象类和抽象方法

    抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。

    抽象方法和抽象类的规则如下:
    1、抽象类,抽象方法必须使用修饰符abstract修饰,抽象方法不能有方法体。
    2、抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类实例。
    3、抽象类可以包含Feild,方法(普通方法和抽象方法都可以),构造器,初始化块,内部类,枚举类6种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。
    4、含有抽象方法的类只能被定义为抽象类。

    public abstract class Shape {
        {
            System.out.println("执行Shape的初始化块!");
        }
        private String color;
        public abstract double calPerimeter();
        public abstract String getType();
        public Shape(){}
        public Shape(String color){
            System.out.println("执行Shape的构造器....");
            this.color = color;
        }
    }

    抽象类不能用于创建实例,只能当作父类被其他子类继承。

    public class Triangle extends Shape {
    	private double a;
    	private double b;
    	private double c;
    
    	public Triangle(String color, double a, double b, double c) {
    		super(color);
    		this.setSides(a, b, c);
    	}
    
    	public void setSides(double a, double b, double c) {
    		if (a >= b + c || b >= a + c || c >= a + b) {
    			System.out.println("三角形的两边之和必须大于第三边。");
    			return;	
    		}
    		this.a = a;
    		this.b = b;
    		this.c = c;
    	}
    
    	@Override
    	public double calPerimeter() {
    		return a + b + c;
    	}
    
    	@Override
    	public String getType() {
    		return "三角形";
    	}
    
    }
    
    public class Circle extends Shape {
    	private double radius;
    
    	public Circle(String color, double radius) {
    		super(color);
    		this.radius = radius;
    	}
    
    	public void setRaius(double radius) {
    		this.radius = radius;
    	}
    
    	@Override
    	public double calPerimeter() {
    		return 2 * Math.PI * radius;
    	}
    
    	@Override
    	public String getType() {
    		return "圆形";
    	}
    	
    	public static void main(String[] args){
    		Shape s1= new Triangle("黑色",3,4,5);
    		Shape s2=new Circle("黄色",3);
    		System.out.println(s1.getType());
    		System.out.println(s1.calPerimeter());
    		System.out.println(s2.getType());
    		System.out.println(s2.calPerimeter());
    	}
    }
    

    console:

    执行Shape的初始化块!
    执行Shape的构造器....
    执行Shape的初始化块!
    执行Shape的构造器....
    三角形
    12.0
    圆形
    18.84955592153876

    当使用abstract修饰符时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。
    而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract永远不能同时使用。

    static和abstract不能同时修饰某个方法。

    抽象父类可以只定义需要使用的某些方法把不能实现的部分抽象成抽象方法,留给其子类去实现。

    父类中可能包含需要调用的其他系列方法的方法,这些被调方法即可以由父类实现,也可以由子类实现。父类里提供的方法之是定义一个通用的算法,其实现也许并不完全由自身实现。而必须依赖于其子类的辅助。

  • 相关阅读:
    DevOps、CI、CD都是什么鬼?
    卧槽!华为《Linux中文手册》火了,完整版 PDF 开放下载!
    MongoDB 常用运维实践总结
    谈谈变更过程中的运维意识
    Ping原理详解
    为什么Redis要比Memcached更火?
    一篇文章教你搞懂日志采集利器 Filebeat
    工程师姓什么很重要!别再叫我“X工”!!!
    这些 Shell 分析服务器日志命令集锦,收藏好
    Linux下找出吃内存的方法总结
  • 原文地址:https://www.cnblogs.com/haiwei_sun/p/3615044.html
Copyright © 2011-2022 走看看