DAY10 復習
1.介面的特點:
- 我們使用interface關鍵字定義介面
- 我們使用implements關鍵字建立介面實作類與介面的實作關系
介面是父級,介面實作類是子級 - 介面實作類如果實作部分/不實作介面中的抽象方法,那么實作類是一個抽象類
介面實作類如果實作了介面所有的抽象方法,那么這個實作類是一個普通類 - 抽象類與介面都不可以實體化/創建物件
- 介面沒有建構式,實作類使用的super()是父類的無參構造
如果沒有明確指定父類,super()代表的才是Object的無參構造 - 介面中都是靜態常量,沒有成員變數,因為會默認拼接public static final
- 介面中都是抽象方法,默認會拼接public abstract
故此:靜態常量與抽象方法默認拼接的部分,可以省略不寫 - 介面不是類!!!
- 介面是用來制定規則的【有哪些功能?方法有引數嗎?有回傳值嗎?】
方法具體的實作交給介面的實作類去完成
2. 介面與類的關系
1.類與類的關系
繼承關系,只支持單繼承
2.類與介面的關系
實作關系,可以單實作,也可以多實作
class A implements Inter1{}–單實作
class B implements Inter2,Inter3{}–多實作
3.介面與介面的關系
是繼承關系,可以單繼承,也可以多繼承
interface Inter3 extends Inter1{}–介面的單繼承
interface Inter4 extends Inter1,Inter2{}–介面的多繼承
注意:如果創建介面實作類的話:
Inter3Impl只需要實作介面3與介面1的抽象方法
Inter4Impl不僅需要實作介面4,還需要實作介面4繼承自介面1與介面2的所有功能
3. 抽象類與介面的區別:
- 抽象類使用class關鍵字定義,是類
介面使用interface關鍵字定義,是介面
2.抽象類里可以定義成員變數
介面里沒有成員變數,有的是靜態常量,默認會拼接public static final
3.抽象類里的方法不作限制:全普、全抽、半普半抽
介面中的方法都是抽象方法,默認會拼接:public abstract
4.抽象類與介面均不可以實體化/創建物件
5.抽象類里有構造方法,不是為了自己使用,而是為了子類創建物件時呼叫
介面里沒有構造方法,介面實作類呼叫的構造是父類的構造方法,與介面無關
6.介面可以多繼承,也就是說,一個介面可以繼承一個介面/多個介面
抽象類只能單繼承,也就是說,一個子類只能有一個父類
7.抽象是后天重構的結果,介面是先天設計的結果
4. 練習鞏固1
設計學校開學招待所案例
身份:老師 學生 學生家長
吃飯:教師食堂 學生食堂 招待所
住宿:學校公寓 學生宿舍 招待所
- 完成Person介面
package cn.tedu.oop;
//1.定義一個介面,描述人這一類事物以及共有功能
public interface Person {
//面向介面編程:介面的設計要方便和后續實作類的統一
//2.設計出共同的功能
void eat();//要吃飯
void sleep();//要睡覺
}
- 設計不同的角色實作我們規定的介面
老師類Teacher
package cn.tedu.oop;
//3.創建介面實作類
public class Teacher implements Person{
//4.按照角色的特點實作介面中的兩個方法
@Override
public void eat() {
System.out.println("老師在教師食堂吃飯");
}
@Override
public void sleep() {
System.out.println("老師在學校公寓住宿");
}
}
學生類Student
package cn.tedu.oop;
//5.創建學生實作類實作Person介面
public class Student implements Person{
@Override
public void eat() {
System.out.println("學生在學校食堂吃飯");
}
@Override
public void sleep() {
System.out.println("學生在宿舍睡覺");
}
}
家長類Parent
package cn.tedu.oop;
//6.創建家長實作類實作Person介面
public class Parent implements Person{
@Override
public void eat() {
System.out.println("家長在招待所吃飯");
}
@Override
public void sleep() {
System.out.println("家長在招待所休息");
}
}
測驗類
package cn.tedu.oop;
//7.創建測驗類
public class TestPerson {
public static void main(String[] args) {
//8.分別創建3個介面實作類的物件
Teacher t = new Teacher();
Student s = new Student();
Person p = new Parent();
//9.通過物件呼叫方法測驗
t.eat();
t.sleep();
s.eat();
s.sleep();
p.eat();
p.sleep();
}
}
5. 練習鞏固2
- 鳥與昆蟲具有飛行的共同功能,就可以定義一個父介面FlyAnimal,描述飛行fly()功能
package cn.tedu.oop2;
/*定義一個介面,描述動物會飛這一功能*/
//1.定義父介面,并定義父介面中飛行的功能
public interface FlyAnimal {
void fly();
}
- 定義父類小鳥類Bird : 腿的數量為2 ,下蛋數量可以自定義 ,還有下蛋layEggs()的功能
package cn.tedu.oop2;
//2.定義父類小鳥類
abstract public class Bird {
//3.1定義小鳥類的屬性
int legNumbers = 2;//小鳥腿的數量為2
int eggNumber;//小鳥下蛋的數量
//3.2定義小鳥類的方法
public abstract void layEggs();
}
- 定義父類昆蟲類Insect : 腿的數量為6,產卵的數量可以自定義,還有產卵spawn()的功能
package cn.tedu.oop2;
//4.定義父類昆蟲類
abstract public class Insect {
//5.1定義昆蟲類的屬性
int legNumbers = 6;//定義腿的數量
int eggNumber;//定義卵的數量
//5.2定義昆蟲類的方法
public abstract void spwan();
}
- 定義小鳥類子級:鴿子類Pigeon:它既會飛,也會下蛋
package cn.tedu.oop2;
//6.創建子類鴿子類
public class Pigeon extends Bird implements FlyAnimal{
@Override//這個是父抽象類中的下蛋方法
public void layEggs() {
System.out.println("鴿子的下蛋數為:"+eggNumber);
}
@Override//這個是父介面中的飛行方法
public void fly() {
System.out.println("鴿子要飛啦~");
}
}
- 定義小鳥類子級:燕子類Swallow:它既會飛,也會下蛋,還有自己的特有功能筑巢
package cn.tedu.oop2;
//7.定義子類燕子類
public class Swallow extends Bird implements FlyAnimal{
@Override//這個是父抽象類中的下蛋方法
public void layEggs() {
System.out.println("燕子的下蛋數為:"+eggNumber);
}
@Override//這個是父介面中的飛行方法
public void fly() {
System.out.println("燕子歸巢~");
}
public void makeNest(){//子類的特有功能
System.out.println("燕子在筑巢!");
}
}
- 定義昆蟲類子級:螞蟻類Ant:它既會飛,也會產卵
package cn.tedu.oop2;
//8.定義子類螞蟻類--子實作類
public class Ant extends Insect implements FlyAnimal{
@Override//繼承子父介面的方法飛行功能
public void fly() {
System.out.println("螞蟻也會飛~");
}
@Override//繼承自父抽象類的方法產卵
public void spwan() {
System.out.println("螞蟻的產卵數為:"+eggNumber);
}
}
- 定義昆蟲類子級:蜜蜂類Bee:它既會飛,也會產卵,還有自己的特有功能制作蜂蜜
package cn.tedu.oop2;
//9.定義子類蜜蜂類
public class Bee extends Insect implements FlyAnimal{
@Override
public void fly() {
System.out.println("蜜蜂也飛啦~");
}
@Override
public void spwan() {
System.out.println("蜜蜂的產卵數為:"+eggNumber);
}
public void makeHoney(){
System.out.println("蜜蜂在產蜂蜜~");
}
}
8.測驗類
package cn.cxy.exec;
/*本類用作動物設計案例的測驗類*/
public class TestAnimals {
public static void main(String[] args) {
System.out.println("*********我在測驗螞蟻類**********");
//1.1創建螞蟻類物件
Ant a = new Ant();
//1.2設定產卵的數量
a.eggNumber = 300;
//1.3查看腿的條數--父類中的默認值,沒有修改,直接獲取
System.out.println("螞蟻的腿有"+a.legNumbers+"條");
//1.4 呼叫實作后的功能 飛行 產卵
a.fly();
a.spawn();
System.out.println("*********我在測驗鴿子類**********");
//2.1創建鴿子類物件
Pigeon p = new Pigeon();
//2.2設定下蛋的數量
p.eggNumber = 3;
//2.3查看腿的條數--父類中的默認值,沒有修改,直接獲取
System.out.println("鴿子的腿有"+p.legNumbers+"條");
//2.4 呼叫實作后的功能 飛行 下蛋
p.fly();
p.layEggs();
System.out.println("*********我在測驗燕子類**********");
//3.1創建燕子類物件
Swallow s = new Swallow();
//3.2設定下蛋的數量
s.eggNumber = 6;
//3.3查看腿的條數--父類中的默認值,沒有修改,直接獲取
System.out.println("燕子的腿有"+s.legNumbers+"條");
//3.4 呼叫實作后的功能 飛行 下蛋
s.fly();
s.layEggs();
//3.5呼叫子類的特有功能--筑巢
s.makeNest();
System.out.println("*********我在測驗蜜蜂類**********");
//4.1創建蜜蜂類物件
Bee b = new Bee();
//4.2設定產卵的數量
b.eggNumber = 600;
//4.3查看腿的條數--父類中的默認值,沒有修改,直接獲取
System.out.println("蜜蜂的腿有"+b.legNumbers+"條");
//4.4 呼叫實作后的功能 飛行 產卵
b.fly();
b.spawn();
//4.5呼叫子類的特有功能--產蜂蜜
b.makeHoney();
}
}
- 最終的測驗效果:

6. 內部類
- 創建內部類物件的格式:
外部類名.內部類名 物件名 = 外部類物件.內部類物件 - 根據內部類所在位置的不同,分為:
成員內部類(類里方法外)與區域內部類(方法里) - 內部類可以直接使用外部類的資源,包括私有資源!
- 外部類如果想要使用內部類的資源,必須先創建內部類的物件,然后通過內部類物件來呼叫內部類的資源
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323432.html
標籤:java
