JAVA抽象类与接口详解

JAVA抽象类与接口

 

接口是对类的抽象

 

一、抽象类

 

1、什么是抽象类?

A:生活中

某些类在现实世界中是不能直接找到其对应的实例的,如车这个类,不可能为它找到一个对应的事物,因为现实世界中只有汽车,自行车,火车等事物,而他们都是车的子类,不能说是车这个类的实例,这样的类称为抽象类。、

B:程序中

JAVA允许在类中只声明方法而不提供方法的实现。这种只有声明而没有方法体的方法称为抽象方法,而包含一个或多个抽象方法的类称为抽象类。抽象类在使用上有特殊的限制,即不能创建抽象类的实例。这是为了阻止程序员创建抽象类的实例队形,编译期在编译时刻对此进行检查,JAVA中要将抽象类和抽象方法带上abstract标记。

 

2、抽象类有什么用?

A:定义规范

B:实现多态

 

3、抽象类怎么用?

 

A:定义一个抽象类

/**

 * 定义形状抽象类

 * @author Administrator

 *

 */

public abstract class Shape {

//定义一个求面积的方法

abstract public void area();

//定义一个求颜色的方法

public void color(){

System.out.println("yello");

}

}

 

B:定义抽象类的子类

/**

 * 圆继承形状类

 * @author Administrator

 *

 */

public class Circle extends Shape {

private double r;

public Circle(double r) {

this.r = r;

}

//这里强制要求重写求面积的抽象方法,而求颜色的方法没要求

@Override

public void area() {

System.out.println("圆的面积:"+3.14*r*r);

}

}

 

C:定义抽象类的子类

/**

 * 三角形继承形状类

 * @author Administrator

 *

 */

public class Triangle  extends Shape{

private double height;

private double width;

public Triangle(double height, double width) {

this.height = height;

this.width = width;

}

//这里强制要求重写求面积的抽象方法,而求颜色的方法没要求

@Override

public void area() {

System.out.println("三角形的面积:"+height*width);

}

}

 

D:测试类

/**

 * 测试类

 * @author Administrator

 *

 */

public class Test {

public static void main(String[] args) {

//父类的引用指向子类的实例

Shape shape = new Circle(3);

Test.diaplay(shape);

System.out.println("---------");

Shape shape1 = new Triangle(3,4);

Test.diaplay(shape1);

}

public static void diaplay(Shape shape){

shape.area();

}

}

 

E:测试结果

 

 

F:抽象类的特点

如果继承抽象类,子类必须重写抽象类里面的所有抽象方法,或者将子类定义为抽象类。而且抽象类不能实例化,抽象类里面可以定义实现方法。

 

 

二、接口

 

1、什么是接口?

A:生活中

USB接口,电源插座接口...

接口就像老板一样,只说不做,最高权力拥有者。

现实世界中,有各种各样的门,每种门都有不同的开关方法,所以在描述门的时候不能定义死某个具体的门类。可以抽象出门对象的共同属性,构造一个抽象的门类,定义其开关方法。让其具体门对象去实现各自的方法。

同时,如果有的门具有防盗功能,想想是不是应该把这个方法加在父类中呢?如果加在父类中,它的每个子类都要去实现这个方法,显然这样做是不科学的。要怎么办呢?此时接口就应该站出来了,定义一个接口并在其中定义一个报警的方法,如果哪个具体的门类有这个功能就去实现这个接口。

B:程序中

接口是用来实现类似多重继承功能的一种结构,它在语法上和类很类似,它有属性和方法,接口间也可以形成继承关系,但接口和类有着很大的区别,它的属性都是常量,方法都是抽象方法,没有方法体。接口使用Interface关键字定义。

 

2、接口有什么用?

A:一种规范,一种约束,有利于协作完成任务

B:多继承

C:是个性化,是一种优秀的表现

 

3、接口怎么用?

 

A:定义一个门类

/**

 * 定义门抽象类

 * @author Administrator

 *

 */

public abstract class Door {

//定义开门抽象方法

abstract public void open();

//定义关门抽象方法

abstract public void colse();

}

 

B:定义门的实现类

/**

 * 推拉门

 * @author Administrator

 *

 */

public class DoubleActingDoor extends Door implements Alarm{

 

@Override

public void open() {

System.out.println("我是推拉门,开我向前推");

}

 

@Override

public void colse() {

System.out.println("我是推拉门,关我向后推");

}

 

@Override

public void alarm() {

System.out.println("我有防盗功能额");

}

}

 

C:定义门的实现类

/**

 * 卷帘门

 * @author Administrator

 *

 */

public class VolumePageDoor extends Door {

 

@Override

public void open() {

System.out.println("我是卷帘门,开我向上拉");

}

 

@Override

public void colse() {

System.out.println("我是卷帘门,关我向下拉");

}

}

 

D:定义一个接口

/**

 * 警报接口

 * @author Administrator

 *

 */

public interface Alarm {

void alarm();

}

 

E:测试类

/**

 * 测试类

 * @author Administrator

 *

 */

public class Test {

public static void main(String[] args) {

DoubleActingDoor dad = new DoubleActingDoor();

dad.alarm();

dad.open();

dad.colse();

System.out.println("---------");

VolumePageDoor vpd = new VolumePageDoor();

vpd.open();

vpd.colse();

}

}

 

F:测试结果

 

 

G:接口的特点

接口是更高级的抽象,接口里的属性和方法可以通过反编译可以看到:属性为常量(public static final,方法为抽象方法(abstract public)。同时接口里全部都是抽象方法。

 

三、接口与抽象方法的区别

 

A:相同点

(1)如果类要实现接口或抽象类必须重写它们里面的全部抽象方法

(2)接口和抽象类都不能实例化

B:不同点

(1)接口里属性全为静态常量,方法全为抽象方法。抽象类里不强制要求。

(2)类实现接口可以类似多继承,类实现抽象类只能单继承。

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值