接口和多态
程序员文章站
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扫描器类
上一篇: MATLAB直接输出棋盘格标定板
下一篇: 接口interface