抽象類(lèi)
/*
abstract 抽象的
修飾的方法派近,在抽象類(lèi)中只寫(xiě)方法的聲明驯镊,不需再實(shí)現(xiàn)
*/
public abstract class Uncle {
private String name;
private int age;
// 抽象方法
public abstract void fahongbao();
}
子類(lèi)一:extends 父類(lèi)的名字
public class Uncleone extends Uncle {
public void fahongbao(){
System.out.println("大舅發(fā)紅包士八,還送煙");
}
}
子類(lèi)二:
public class Uncletwo extends Uncle {
public void fahongbao(){
System.out.println("二舅發(fā)紅包,還送煙");
}
}
關(guān)鍵點(diǎn):
語(yǔ)法:1抽象類(lèi)的前面需要abstract關(guān)鍵字聲明
2 抽象類(lèi)中至少有一個(gè)抽象方法
3 抽象方法需要abstract關(guān)鍵字修飾
子類(lèi)必須要實(shí)現(xiàn)抽象類(lèi)中的抽象方法
接口interface
public interface Uncle {
// 在接口中聲明方法
public void fahongbao();
}
子類(lèi)一:implements 父類(lèi)的名字
public class UncleOne implements Uncle{
@Override
public void fahongbao() {
System.out.println("大舅發(fā)紅包左电,還送煙");
}
}
子類(lèi)二:
public class UncleTwo implements Uncle {
@Override
public void fahongbao() {
System.out.println("二舅發(fā)紅包,還送酒");
}
}
1 關(guān)鍵字 interface
2 接口中的方法只需要聲明,不能有方法體备埃,方法只能是共有的
3子類(lèi)需要實(shí)現(xiàn)接口中的所有方法姓惑,實(shí)現(xiàn)的語(yǔ)法是implements接口名
例外
1 可以寫(xiě)公有的常量
2 可以寫(xiě)默認(rèn)的方法default修飾
public interface Uncle {
// 公有常量
public String chenhu= "舅舅";
// 在接口中聲明方法
public void fahongbao();
// 不管那個(gè)舅舅都需要照顧老人,為了避免重復(fù)按脚,寫(xiě)在接口中于毙,default
public default void zhaogulaoren(){
System.out.println("每個(gè)舅舅都需要照顧老人");
}
}
多實(shí)現(xiàn) (多重實(shí)現(xiàn))
// 多繼承(多重繼承) 多實(shí)現(xiàn) ( 多充實(shí)現(xiàn))
public class UncleTwo implements Uncle ,Father,GrandFather{
@Override
public void fahongbao() {
System.out.println("二舅發(fā)紅包,還送酒");
}
@Override
public void yangjia() {
System.out.println("二舅也是一位父親辅搬,需要養(yǎng)家");
}
}
多繼承(多重繼承) 只有接口才可以多重繼承
// 多(重)繼承 extends Uncle,Father,GrandFatherpublic interface Temp extends Uncle,Father,GrandFather{ }
public class UncleThree implements Temp { @Override public void yangjia() { } @Override public void fahongbao() { } @Override public void zhaogulaoren() { }}
抽象類(lèi)與接口的對(duì)比
案例
package edu.xcdq.demo01.demo04;// 爺爺類(lèi) 抽象的 有一個(gè)釣魚(yú)的抽象的方法沒(méi)有實(shí)現(xiàn)public abstract class Yeye { public abstract void diaoyu();}
package edu.xcdq.demo01.demo04;// 爸爸類(lèi) 抽象的 從爺爺繼承來(lái)的抽象方法可以不實(shí)現(xiàn)唯沮,也可以實(shí)現(xiàn)public abstract class Baba extends Yeye{ public abstract void tangtou();}
package edu.xcdq.demo01.demo04;// 叔叔類(lèi) 標(biāo)準(zhǔn)的實(shí)體類(lèi) 不是抽象類(lèi) 繼承的父類(lèi)中所有的抽象方法必須全部實(shí)現(xiàn)public class Shushu extends Yeye{ @Override public void diaoyu() { System.out.println(""); }}
package edu.xcdq.demo01.demo04;// 標(biāo)準(zhǔn)實(shí)體類(lèi) ,需要全部實(shí)現(xiàn)父類(lèi)中累計(jì)沒(méi)有實(shí)現(xiàn)的所有抽象方法public class Sunzi extends Baba{ @Override public void tangtou() { } @Override public void diaoyu() { }}