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盘等。
电源插座可以插笔记本电脑,电视机等各种用具
2.2接口的语法规则
1.接口中的抽象方法默认都是public abstract修饰的
public interface 接口名称{
// 抽象方法
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
// 注意:在接口中上述写法都是抽象方法,推荐method4,代码更简洁
![](https://i-blog.csdnimg.cn/direct/27bc812ffefb4052b3fb6447a5b43d15.png)
![](https://i-blog.csdnimg.cn/direct/5f5ba9143a9a4423abce68a9e2f1d452.png)
![](https://i-blog.csdnimg.cn/direct/9b0469c9368c47edaf0c14cc8bb18170.png)
![](https://i-blog.csdnimg.cn/direct/8eb50fa1828443fdb4f770ba37ba9ada.png)
![](https://i-blog.csdnimg.cn/direct/e7745c1d65a04a088446420402394b94.png)
![](https://i-blog.csdnimg.cn/direct/f402862175c7434e8c1ac26c6fe40689.png)
![](https://i-blog.csdnimg.cn/direct/9a9b0fa6e52640889b4d87c3de9abd8b.png)
![](https://i-blog.csdnimg.cn/direct/61fa5cb4fbdb4820bb085e5aa18a491a.png)
![](https://i-blog.csdnimg.cn/direct/e2a7d634acb541a5815d448e15e08642.png)
interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
...
}