JavaSE—11.抽象類_介面
阿新 • • 發佈:2018-12-17
抽象類
- 用abstract關鍵字來修飾一個類時,這個類叫做抽象類;用abstract來修飾一個方法時,該方法叫做抽象方法
- 含有抽象方法的類必須被宣告為抽象類,抽象類必須被繼承,抽象方法必須被重寫
- 抽象類不能被例項化
- 抽象方法只需宣告,而不需實現
abstract class Animal {
private String name;
Animal(String name){
this.name = name;
}
public abstract void enjoy();
}
class Cat extends Animal {
private String eyeColor;
Cat(String n, String c) {
super(n);
eyeColor = c;
}
public void enjoy() {
System.out.println("貓叫聲");
}
}
final關鍵字
- final的變數的值不能夠被改變
- final的成員變數
- final的區域性變數(無參)
- final的方法不能夠被重寫
- final的類不能夠被繼承
介面
- 多個無關的類可以實現同一個介面
- 一個類可以實現多個無關的介面
- 與繼承關係類似,介面與實現類之間存在多型性
- 介面(interfaace)是抽象方法和常量值得定義的集合
- 從本質上講,介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變數和方法的實現。
- 定義舉例:
public interface Runner {
public static final int id = 1;
public void start();
public void run();
public void stop();
}
- 介面可以多重實現
- 介面中宣告的屬性預設為public static final的;也只能是public static final的
- 介面中只能定義抽象方法,而且這些方法預設為public的、也只能是public的
- 介面可以繼承其他介面,並新增新的屬性和抽象方法
- 介面舉例:
interface Singer {
public void sing();
public void sleep();
}
interface Painter {
public void paint();
public void eat();
}
class Student implements Singer {
private String name;
Student(String name) {
this.name = name;
}
public void study() {
System.out.println("studying");
}
public void sing() {
System.out.println("student is singing");
}
public void sleep() {
System.out.println("student is sleeping");
}
public String getName() {
return name;
}
}
class Teacher implements Singer, Painter {
private String name;
public String getString() {
return name;
}
Teacher(String name) {
this.name = name;
}
public void teach() {
System.out.println(“teaching);
}
public void sing() {
System.out.println("teacher is singing");
}
public void sleep() {
System.out.pritln("teacher is sleeping");
}
public void paint() {
System.out.println("teacher is painting");
}
public void eat() {
System.out.println("teacher is eating");
}
}
public class Test {
public static void main(String args[]) {
Singer s1 = new Student("le");
s1.sing();
s1.sleep();
Singer s2 = new Teacher("steven");
s2.sing();
s2.sleep();
Painter p1 = (Painter)s2;
p1.paint();
p1.eat();
}
}