Java学习06-抽象类和接口

抽象类和接口

1.1抽象类和抽象方法

1.1.1抽象类的定义

abstract class 类名{
成员变量定义;
方法(){…} //定义具体方法
abstract 方法(); //定义抽象方法
{
【注意】

  1. 抽象类中可以包含具体方法和抽象方法(抽象类中可以不含具体方法,也可以不含抽象方法,但是有抽象方法的类必须定义为抽象类)
  2. 抽象方法没有方法体。
  3. 抽象类不能实例化为对象(即不能new)
  4. 一个普通的类继承抽象类时,必须重写抽象类中的抽象方法。
  5. 抽象类的子类可以实例化对象。

1.1.2抽象类的应用

abstract class Shape{   //定义抽象类
    abstract public double area();  //抽象方法
}

class Triangle extends Shape{       //定义抽象类的子类Triangle类
    private double a,b,c;

    public Triangle(double a, double b, double c) {     //Triangle类的构造方法
        this.a = a;
        this.b = b;
        this.c = c;
    }

    @Override
    public double area() {  //重写抽象类的area()方法
        double p = (a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    }
}

class Cricle extends Shape{     //定义抽象类的子类Cricle类
    private double r;

    public Cricle(double r) {       //Cricle类的构造方法
        this.r = r;
    }

    @Override
    public double area() {  //重写抽象类的area()方法
        return Math.PI*r*r;
    }
}

public class Ex01 {
    public static void main(String[] args) {
        Shape s[] = new Shape[2];   //定义Shape类型的数组
        s[0] = new Triangle(25,41,50);  //抽象类不能实例化对象,所以要通过其子类实例化对象(父类引用指向子类对象)
        s[1] = new Cricle(47);

        for (int n = 0; n<s.length; n++){
            System.out.println(s[n].area());
        }
    }
}

1.2接口

Java不支持多重继承,而是通过接口实现比多重继承更强的功能。

1.2.1接口定义

[public] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 域类型 域名 = 常量值;
[public] [abstract] 返回值类型 方法名(参数列表)[throws 异常列表];
}
【注意】

  1. 接口的访问控制符为public,尽管不写public,也会默认为publc ( 建议在声明接口时写上public)
  2. 接口中所有属性的修饰默认是public static final,也就是均为静态常量。
  3. 接口中所有方法的修饰默认是public abstract,也就是接口中的方法都是抽象方法(如果实现某接口的类没有将接口所有的抽象方法具体实现,则编译时将提示该类为抽象类,而抽象类是不能创建对象的)
  4. 接口具有继承性,一个接口还可以继承多个父接口,父接口间用逗号分割。
  5. 接口是抽象类的一种,也不能用于创建实例对象。
  6. 接口的作用在于规定一些功能框架,具体功能的实现则由遵守该接口约束的类去完成

猜你喜欢

转载自blog.csdn.net/qq_42145862/article/details/88937963