目录
- 抽象类
- 接口
- 抽象类与接口
- 抽象类
1.1 认识抽象类
概念:一个类没有足够的信息去描述一个具体的对象时,这个类就是一个抽象类
语法:一个被abstract修饰的类称为抽象类,抽象类中被abstract修饰的方法称为抽象方法,抽象方法不用给出具体的实现体
格式:
示例:
abstract class Shape{
abstract public void draw();
abstract void calcArea();
public double getArea(){
return area;
}
protected double area;
}
抽象方法没有方法体
抽象类也可以增加普通方法与属性、构造方法
1.2 抽象类的特性总结
1.抽象类不能实例化
2.抽象方法不能是 private 修饰
3.抽象方法需要被子类继承,因此不能被final和static修饰
4.抽象类必须被继承,且子类必须重写父类的抽象方法,否则子类也是抽象类
abstract class Shape{
abstract public void draw();
abstract void calcArea();
public double getArea(){
return area;
}
protected double area;
}
class Circle extends Shape{
private double r;
final private static double PI = 3.14;
public Circle(double r) {
this.r = r;
}
@Override
public void draw() {
System.out.println("圆形:r"+r);
}
@Override
void calcArea() {
area = PI*r*r;
}
@Override
public double getArea() {
return super.getArea();
}
}
5.抽象类中不一定包含抽象方法,有抽象方法的类一定是抽象类
6.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量
1.3 抽象类的一个重要作用
- 接口
2.1 如何理解接口?
接口就是公共的行为规范标准,实现时,只要符合规范标准,就可以通用
电子产品的USB、电源插座等
语法:
接口的定义与类基本相同,关键字:interface
- 创建接口时, 接口的命名一般以大写字母I开头
- 接口的命名一般使用 "形容词" 词性的单词
public interface Inter {
//抽像方法
void method();
}
2.2 接口的使用
接口是不能直接使用的,要定义具体类来实现接口中的所有抽象方法
关键字:implements
注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系
格式:
public class 类名称 implements 接口名称 {
//...
}
2.3 接口特性
报错: 'A'中的'openDevice()'与'USB'中的'openDevice()'冲突;试图分配较弱的访问权限('package-private');“公共”
报错:类“A”必须被声明为抽象,或者在“USB”中实现抽象方法“USB()”
2.4 实现多个接口
看一个例子:
public class Test {
public static void main(String[] args) {
dragon drag = new dragon("dragon");
drag.fly();
drag.swim();
}
}
//定义一个动物类
class Animal{
protected String name;
public Animal(String name){
this.name = name;
}
}
//定义接口
interface IFlying{
void fly();
}
interface ISwimming{
void swim();
}
//定义鸟类
class Bird extends Animal implements IFlying{
public Bird(String name) {
super(name);
}
@Override
public void fly() {
System.out.println(name+"正在用翅膀飞");
}
}
//定义鱼类
class Fish extends Animal implements ISwimming {
public Fish(String name) {
super(name);
}
@Override
public void swim() {
System.out.println(name+"正在用尾巴游");
}
}
//定义龙类
class dragon extends Animal implements ISwimming,IFlying{
public dragon(String name) {
super(name);
}
@Override
public void fly() {
System.out.println(name+"正在腾云驾雾");
}
@Override
public void swim() {
System.out.println(name+"正在海里游");
}
}
2.5 接口间的继承
关键字:extends
interface IAmphibious extends IFlying,ISwimming{
@Override
void fly();
@Override
void swim();
}
class dragon1 extends Animal implements IAmphibious{
public dragon1(String name) {
super(name);
}
@Override
public void fly() {
//...
}
@Override
public void swim() {
//...
}
}
3.抽象类与接口
抽象类的存在是为了让编译器更好的校验❌
语法上的区别:
1.抽象类的成员变量是无限制的,接口中的成员变量只能是public static final类型的
2.抽象类可以提供成员方法的实现细节,接口中只能存在public abstract 方法
3.抽象类可以有静态代码块和静态方法,接口中不能含有静态代码块以及静态方法
4.一个类只能继承一个抽象类,一个类却可以实现多个接口