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

    1.当用abstract来修饰一个类时,这个类就是抽象类。当abstract来修饰一个方法时,这个方法就是抽象方法。

    2.含有抽象方法的类必须被定义为抽象类,抽象类必须被继承,抽象方法必须被重写

    3.抽象类不能被实例化,只能被子类继承。

    4.抽象方法只需声明,无需实现,抽象方法没有方法体

    例,在同一个包下定义一个Shape.java文件

    public abstract class Shape {
        
        {
            System.out.println("执行Shape的初始化块");
        }
        //定义一个计算周长的抽象方法
        public abstract double calPerimeter();
        //定义一个返回形状的抽象方法
        public abstract String getTyp();
    }

    再定义一个Triangle.java文件

    public class Triangle extends Shape{
       
        //定义三边
        private double a;
        private double b;
        private double c;
        
        public Triangle(double a,double b , double c) {
            this.setSides(a,b,c);
        }
        public void setSides(double a, double b , double c){
            if (a >= b+c && b >= a + c && c >= b + a) {
                System.out.println("三角形不合法");
                return;
            }
            this.a = a;
            this.b = b;
            this.c = c;
        }
        
        //重写父类计算周长的抽象方法
        @Override
        public double calPerimeter() {
            
            return a + b + c;
        }
    
        //重写父类的返回形状的方法
        @Override
        public String getTyp() {
            
            return "三角形";
        }
        
        public static void main(String[] args)
        {
            Shape s1 = new Triangle(3,4,5);
         //输出12.0
    System.out.println(s1.calPerimeter()); }

    抽象类的作用:

    /*自己总结的*/

    如果不同的子类需要从父类类中调用相同的方法,比如都需要计算周长,从shape父类中调用calPerimeter()方法,但圆(circle)与三角形(triangle)计算周长的方式并不一样,如果在shape定义一个带有方法体的非抽象方法,一定不能满足同时计算圆与三角形周长的要求。如果定义shape为抽象类,calPerimeter为抽象方法,只需要在子类中重写calPerieter()方法适合自己就行了。
    /*书本*/

    从语义的角度来看抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象。从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为其子类的模版,从而避免了子类设计的任意性。

  • 相关阅读:
    快速排序理论---不含源码
    归并排序理论---不含源码
    希尔排序(shell)理论---不含源码
    Visual C++中error spawning cl.exe解决办法
    数据库的基础知识点---1
    冒泡排序的基础知识部分(不含源码)
    在虚拟机的Linux系统下安装wineqq
    数据变量的别名
    void*和void类型
    变量的作用域和连接性
  • 原文地址:https://www.cnblogs.com/mercuryli/p/4598580.html
Copyright © 2011-2022 走看看