欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

接口和多态

程序员文章站 2022-05-22 11:19:27
...

接口

接口:当一个抽象类,如果抽象类中的所有方法都是抽象的,
那么我们就可以把它定义为一个接口,接口是对行为的抽象。类是对属性和行为的抽象。

接口定义

    接口无法被直接实例化和抽象类一样。但是可以通过对象上转型来间接实例化


    在接口中可以定义常量不可定义变量,这个常量默认是:final static float PI=3.14f;
    它默认用final static 修饰
public interface Animal {
    float PI=3.14f;
    public  abstract void print();
}

接口的继承和实现

接口是无法直接被类继承它只能被类实现,
但是接口可以被其他接口继承(单继承或者多继承[jdk1.7以后])

接口可以被类多实现

接口的应用

使用接口计算圆和正方形的周长和面积

public interface Image{
	 final static float PI=3.14f;
    public double caculateL(double r);
    public double caculateS(double r);
}

class Circle implements Image{
	 private double r;

    public Circle(double r) {
        this.r = r;
    }

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }

    @Override
    public double caculateL(double r) {
        return 2*PI*r;
    }

    @Override
    public double caculateS(double r) {
        return PI*r*r;
    }
}

class Square implements Image{
 private double l;

    public Square(double l) {
        this.l = l;
    }

    public double getL() {
        return l;
    }

    public void setL(double l) {
        this.l = l;
    }

    @Override
    public double caculateL(double r) {
        return 4*r;
    }

    @Override
    public double caculateS(double r) {
        return r*r;
    }
}


class Test{
	public static void main(String[] args){
	       Circle circle = new Circle(5);
        double r = circle.getR();
        System.out.println("圆的周长是:" + " " + circle.caculateL(r) + " " + "圆的面积是:" + circle.caculateS(r));

        System.out.println("=================================");
        Square square = new Square(9);
        double l = square.getL();
        System.out.println("正方形的周长是:" + square.caculateL(l) + " " + "正方形的周长是:" + square.caculateS(l));
	}
}

类的单继承原理

接口和抽象类的区别:
1、接口的所有方法都是抽象的,抽象类里面的方法可以使抽象的也可以是具体的。
2、接口和抽象类都不能实例化,接口需要类来实现后实例化实现类,
抽象类需要类来继承然后实例化子类。
3、抽象类只能单继承,接口可以多继承(jdk1.7),可以多实现。
4、接口中的属性是static final类型,抽象类中的属性跟普通类中的属性没有区别。
5、接口中的方法默认就是抽象的不需要加abstract,抽象类中的抽象方法需要加abstract

接口和多态

多态

多态是同有一个行为具有多个不同的表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同操作。

 多态存在的三个必要条件:继承、重写、父类引用指向子类对象

多态的例子:

public abstract class  Teacher{
    String name;
    public abstract  void teach();
}

class JavaTeacher extends Teacher{

    @Override
    public void teach(){
        System.out.println(this.name+"teacher is teaching java");
    }
}

class PHPTeacher extends Teacher{

    @Override
    public void teach(){
        System.out.println(this.name+"teacher is teaching PHP");
    }
}

class Leader{

    public void checkTeacher(Teacher teacher){
        System.out.println("begin check");
        teacher.teach();
        System.out.println("ennd check");
    }
}

class Test{
    public static void main(String[] args){
        Teacher teacher=new JavaTeacher();
        Teacher teacher1=new PHPTeacher();

        Leader leader=new Leader();
        teacher.name="zzq";
        leader.checkTeacher(teacher);
        System.out.println("==================================================================");
        teacher1.name="gaga";
        leader.checkTeacher(teacher1);
    }
}

多态的内存结构

接口的多态

模板模式

Math类的使用

Scanner扫描器类