抽象类与接口

1.1:

抽象类概念:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类

ex1:

以Animal类为例:其自身并不是一个具体的动物,其内部的成员方法bark无法实现。

但子类Dog和Cat都是具体的动物,可以实现各自的功能。故Animal即为抽象类。

在bark例子中,父类的bark方法似乎并没有做出什么实际的工作,bark各种功能的实现都是由Animal的各种子类来实现的。像这种没有实际工作的方法,我们可以将它设计为一个抽象方法(abstract method),包含抽象方法的类我们称为抽象类。

1.2抽象类语法

在java中,一个类如果被abstract修饰则称为抽象类。抽象类中被abstract修饰的方法称为抽象方法。抽象方法不用给出具体的实现。

EX1:

// 抽象类:被abstract修饰的类
public abstract class Shape {
// 抽象方法:被abstract修饰的方法,没有方法体
abstract public void draw();
abstract void calcArea();
// 抽象类也是类,也可以增加普通方法和属性
public double getArea(){
return area;
}
protected double area; // 面积
}

注:抽象类也是类,内部可以包含普通方法和属性,甚至构造方法。

1.3抽象类的特性:

1.抽象类不能直接实例化对象

ex1:

Shape shape = new Shape();
// 编译出错
Error:(30, 23) java: Shape是抽象的; 无法实例化

2.抽象方法不能为private

3.抽象方法不能被static 和 final修饰,因为抽象方法要被子类重写。

4.抽象类要被继承,并且继承后的子类也要重写父类中的抽象方法,不想重写的话子类也必须为抽象类,用abstract修饰。

EX1:

// 矩形类
public class Rect extends Shape {
private double length;
private double width;
Rect(double length, double width){  //子类构造方法
this.length = length;
this.width = width;
}
public void draw(){   //重写父类抽象方法
System.out.println("矩形: length= "+length+" width= " + width);
}
public void calcArea(){//重写父类抽象方法
area = length * width;
}
}

5.抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。

6.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。

2.接口的概念

现实生活中接口的例子有很多,如笔记本电脑上的usb接口,电源插座等。

在电脑的usb插口上可以插鼠标,键盘,u盘等。

电源插座可以插笔记本电脑,电视机等各种用具

通过上述例子可以看出: 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用
Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

2.2接口的语法规则

1.接口中的抽象方法默认都是public abstract修饰的

public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,推荐method4,代码更简洁

注: 1. 创建接口时, 接口的命名一般以大写字母 I 开头.
2. 接口的命名一般使用 "形容词" 词性的单词.
3. 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性。)
2.接口中的成员变量,默认是public static final修饰的。
ex1:
3.接口中的方法被default修饰,则可以有具体的实现。
4.如果接口中的方法可以被static修饰,也可以有具体的实现。
5.接口是不能进行实例化
6.类与接口之间,可以用implements来实现接口
7.一个接口对应一个字节码文件
8.如果一个类不想实现接口中的方法,那么此时的类便可定义为抽象类,但如果这个抽象类被继承,那么就要实现所有没有被实现的方法。
一个类实现多接口:
2.3接口间的多继承
2.4接口之间的多继承
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
...
}
通过接口继承创建一个新的接口 IAmphibious 表示 " 两栖的 ". 此时实现接口创建的 Frog , 就继续要实现 run
, 也需要实现 swim 方法 .
接口间的继承相当于把多个接口合并在一起 .
2.5抽象类与接口之间的区别:
核心区别 : 抽象类中可以包含普通方法和普通字段 , 这样的普通方法和字段可以被子类直接使用 ( 不必重写 ), 而接口中 不能包含普通方法, 子类必须重写所有的抽象方法。
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值