JavaSE——抽象类和接口详解

简介: JavaSE——抽象类和接口详解

目录

  1. 抽象类
  1. 接口
  1. 抽象类与接口
  2. 抽象类

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 抽象类的一个重要作用

  1. 接口

2.1 如何理解接口?
接口就是公共的行为规范标准,实现时,只要符合规范标准,就可以通用

电子产品的USB、电源插座等

 语法:

接口的定义与类基本相同,关键字:interface

  1. 创建接口时, 接口的命名一般以大写字母I开头
  2. 接口的命名一般使用 "形容词" 词性的单词

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.一个类只能继承一个抽象类,一个类却可以实现多个接口

相关文章
|
8月前
|
Java
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
【JavaSE专栏64】抽象类和接口,不能被实例化的类有什么用?
153 0
|
9月前
|
Java 编译器
【JAVASE】继承 中
【JAVASE】继承
|
11月前
|
Java 编译器
【JavaSE】抽象类
【JavaSE】抽象类
【JavaSE】抽象类
|
1月前
|
存储 Java 机器人
JavaSE学习之--抽象类,接口,内部类(二)
JavaSE学习之--抽象类,接口,内部类(二)
43 0
|
1月前
|
存储 Java 编译器
JavaSE学习之--抽象类,接口,内部类(三)
JavaSE学习之--抽象类,接口,内部类(三)
31 0
|
1月前
|
Java
JavaSE学习之--抽象类,接口,内部类(一)
JavaSE学习之--抽象类,接口,内部类(一)
70 0
|
11月前
|
Java 程序员 编译器
【JavaSE】一起学继承
【JavaSE】一起学继承
|
6月前
|
Java 编译器
JavaSE抽象类和接口
JavaSE抽象类和接口
|
6月前
|
安全 Java 程序员
JavaSE继承和多态
JavaSE继承和多态
|
9月前
|
Java 编译器
【javaSE】 抽象类
【javaSE】 抽象类