2020-11-10

抽象类

抽象类的定义

抽象类和普通类的区别

抽象类怎么去实现

接口类

接口类的定义

接口类如何实现

接口类和抽象类的区别

抽象类的定义:
由于不是所有的对象都是可以用类去描述,如果一个类不能完全描述一个对象,或者该类中的方法是抽象的,则这类成为抽象类。
定义该类使用”abstract“去修饰,定义抽象方法也是用“abstract”描述,抽象类通常用public或protect来修饰以便子类去实现该方法。

抽象类和普通类的关系:
抽象类不能像普通类实例化对象,不能用new操作符去创建对象。(所以抽象类必须需要创建一个子类来继承该抽象类,否则这个抽象类的创建没有意义)
可以定义构造器,但是由于不能实例化对象,构造其可以被用来子类的继承,所以构造器经常用protect来修饰,为了方便子类的使用。
如果一个继承了父类,则必须实现父类的抽象方法。
其他功能和普通类没有区别,子类都是使用extends来继承。
如图定义一个形状类,

abstract class Shape{
        public int index;
        public Shape(){
        }
        public abstract double countPerimeter();//获得周长
        public abstract double countArea();//获得面积
        public abstract String getType();// 获得形状

        public void getshape(){//打印形状
            System.out.println("shape");
        }
    }
    class Circle extends Shape{//创建一个圆类去继承形状类事项所有的抽象方法
        public double radius; //定义半径
        public Circle(double radius) {//定义构造器
            this.radius = radius;
        }    
        public double countPerimeter() {
            double perimeter=radius*3.14*2;
            return perimeter;
        }    
        public double countArea() {
            double arae=3.14*Math.pow(radius,2);
            return arae;
        }
         public String getType() {
            return "圆";
        }
    }

抽象类的实现:
首先去实例化对象,这里必须是实例化对象必须是子类,拿上一段代码来说,必须是Circle类。
Circle C1=new Circle(2.0);

Circle C1=new Circle(2.0);
System.out.println(C1.countArea());
System.out.println(C1.countPerimeter());

在testdemo中去实现得到的结果,结果正确。
在这里插入图片描述

接口类:
接口可以理解为是一种特殊的抽象类,但是抽象类只能是单继承的,只能一个类继承另一个类,为了克服这种关系,就可以用到接口,接口可以一个类继承多个类,在java中,接口的好处是可以通过接口去继承多个接口。在java中,因为接口只管定义功能,不用管功能的具体实现。很多时候把一些功能定义为接口,就可以更具自己的需要选择需要实现的接口,以达到对一些功能的实现。
在java中定义一个抽象类
interface +接口名{
protect abstract void +方法名();
}
在接口类如何定义属性:
接口不能有构造器;
在接口中的所有变量都是public static final 修饰的(这是为了防止在子类继承父类中修改父类中的静态变量);
像抽象类一样定义abstract修饰的抽象方法;
在jdk1.8版本中,接口类中可以定义具有方法实现的方法,但是必须是静态方法或者接口默认方法(就是用static或者default修饰的方法),这里使用static是为了提高代码的复写,在实现接口的时候,我们必须重写所有的抽象方法,在接口实现的方法则不需要被重写。
接口类的实现:
一个类通过implments 关键字类实现接口,这里一个类可以实现多个接口。需要重写接口中的所有抽象方法。
如下我们创建一个计算器类,来简单的实现加减乘除

interface Compute{
        void calculator(int num1,int num2);
  }
       class Add implements Compute{
           public void calculator(int num1, int num2) {
                System.out.println(num1+num2);
       }
  }
       class Subbract implements  Compute{//减法
           public void calculator(int num1, int num2) {
               System.out.println(num1-num2);
       }

   }
       class Multiply implements  Compute{//乘法
          public void calculator(int num1, int num2) {
               System.out.println(num1*num2);
   }
  }
         class Divide implements Compute{
             public void calculator(int num1,int num2){
                 System.out.println(num1/num2);
             }
         }

在testdemo中,通过实现了这个接口的子类去创建接口对象。
如下所示在testdemo去实现接口

 Compute compute1 =new Add();
       Compute compute2 =new Multiply();
       compute1.calculator(13,15);
       compute2.calculator(12,20);

运行结果如下所示
在这里插入图片描述
接口类和抽象类的区别:
1,接口不能包含普通方法,接口只能有抽象方法(jdk1.8之后可以有静态方法和默认方法),抽象类可以办函普通方法。
2,抽象在实现的过程中是单继承关系,一个类只能继承一个抽象类,而接口类可以是多实现,一个类可以事项多个接口。
3,在实现过程的关键字不同,接口用的是implments 来实现接口,抽象类用的是extends来继承抽象类。
4,接口不可以有构造方法,抽象类可以有构造方法。
5,接口只能定义静态常量属性且用final修饰,而抽象类即可以定义静态常量属性,也可以定义普通变量属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值