抽象類,介面,內部類
阿新 • • 發佈:2021-08-09
-
abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法,如果修飾類,那麼該類就是抽象類
-
抽象類中可以沒有抽象方法,但是又抽象方法的類一定要宣告為抽象類
-
抽象類,不能用new關鍵字來建立物件,它是用來讓子類繼承的
-
抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的
-
子類繼承抽象類,那麼久必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類。
//abstract 抽象類
public abstract class Action {
//約束~ 有人幫我們實現
//abstract 抽象方法,只有方法名字,沒有方法的實現!
public abstract void doSomeThing();
//1.不能new這個抽象類,只能靠子類去實現它:約束!
//2.抽象類中可以寫普通方法
//3.抽象方法必須在抽象類中
//抽象的抽象:約束~
//思考題? 抽象類存在構造器麼?
//存在 存在的意義,例如遊戲角色,將共同點抽象出來,提高開發效率
}
//抽象類的所有方法,繼承了它的子類,都必須要實現它的方法~ 除非子類也是抽象類
public class A extends Action{
介面
-
普通類:只有具體實現
-
抽象類:具體實現和規範都有
-
介面:只有規範.自己無法寫方法~專業的約束! 約束和實現分離
-
介面就是規範,定義的是一組規則,體現了現實世界中“如果你是...則必須能...”的思想。如果你是天使,則必須能飛。如果你是汽車,則不虛能跑。如果你是好人,則必須幹掉壞人。如果你是壞人,則必須欺負好人
-
介面的本質是契約,就像我們人間的法律一樣。制定好後大家都遵守
-
OO的精髓,是對物件的抽象,最能體現這一點的就是介面。為什麼我們討論設計模式都只針對具備了抽象能力的語言(比如C++,java,C#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象
-
宣告類的關鍵字是class,宣告介面的關鍵字是interface
-
作用:
-
約束
-
定義一些方法,讓不同的人實現
-
方法都是public abstract
-
屬性都是public static final
-
介面不能被例項化,介面中沒有構造方法
-
implements可以實現多個介面
-
繼承介面的子類必須要重寫介面中的方法
-
//interface 定義的關鍵字,介面都需要有實現類
public interface UserService {
public static final int AGE = 99;
//介面中的所有定義都是預設抽象的 自帶修飾符public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
//類 可以實現介面 implements 介面
//實現介面的類,就需要重寫介面中的方法
//單繼承利用介面實現偽多繼承
public class UserServiceImpl implements UserService,TimeService{
內部類
-
內部類就是在一個類的內部再定義一個類,比如,A類中定義一個B類,那麼B類相對A類來說就是內部類,而A類相對B類來說就是外部類了。
-
1.成員內部類
-
2.靜態內部類
-
3.區域性內部類
-
4.匿名內部類
-
lambada表示式
public class Outer {
private int id;
public void out(){
System.out.println("這是外部類的方法");
}
public class Inner{
public void in(){
System.out.println("這是內部類的方法");
}
//獲得外部類的私有屬性,方法
public void getID(){
System.out.println(id);
}
}
//區域性內部類
public void method() {
class Inner {
public void in() {
System.out.println("這是內部類的方法");
}
}
}
}
//一個java類中可以有多個class類,但是隻能有一個public class
class A{
}
/*
public class Application {
public static void main(String[] args) {
Outer outer = new Outer();
//通過這個外部類來例項化內部類
Outer.Inner inner = outer.new Inner();
inner.in();
}
}
*/
public class Test {
public static void main(String[] args) {
//匿名內部類 沒有名字初始化類,不用把例項儲存到變數中
new Apple().eat();
new UserService(){