姓名: 李小娜
[嵌牛導(dǎo)讀]:這篇文章主要介紹了java繼承示例詳解,需要的朋友可以參考下
[嵌牛鼻子]:什么是繼承(extends) ??
[嵌牛提問]:訪問控制符都有哪些直砂?
[嵌牛正文] :什么是繼承(extends)粒梦?
繼承是:新定義的類是從已有的類中獲取屬性和方法的現(xiàn)象唯袄。 這個已有的類叫做父類, 從這個父類獲取屬性和方法的類叫做子類工坊。
ExtendsDemo1.java
/*什么是繼承*/
public class ExtendsDemo1 {
public static void main(String[] args) {
Truck t = new Truck();
t.size = 100;? ? ? ? ? //不建議這么寫献汗。初始化成員變量最好使用構(gòu)造方法,或者提供set(), get()接口.
//貨車類的一個實(shí)例t從汽車類從繼承了size, color屬性王污。
//而貨車比汽車多一個貨箱
}
}
class Car {? ? ? ? ? ? ? ? ? ? //汽車
int size;? ? ? ? ? ? ? ? ? //車體大小
String color;? ? ? ? ? ? ? //顏色
}
class Truck extends Car {? ? ? //貨車
String packingBox;? ? ? ? ? //貨箱
}
繼承的好處
1. 提高了代碼的重用性
2. 讓類和類之間產(chǎn)生了關(guān)系罢吃, 為多態(tài)創(chuàng)造了條件。
繼承(extends)的格式
class SubClass extends SuperClass {
//執(zhí)行語句昭齐;
}
super關(guān)鍵字
1. super關(guān)鍵字和this的用法相同
2. this代表本類引用尿招, super代表父類引用
3. 當(dāng)子類和父類出現(xiàn)同名成員的時候, 可以用super 和 this進(jìn)行區(qū)分
SuperDemo.java
/* super的用法
* 輸出結(jié)果:
* super.i = 10, this.i = 20
*/
public class SuperDemo {
public static void main(String[] args) {
new SubClass().showMessage();
}
}
class SuperClass {
int i = 10;
}
class SubClass extends SuperClass {
int i = 20;
public void showMessage() {
System.out.printf("super.i = %d, this.i = %d\n", super.i, this.i);
}
}
對從父類繼承過來的方法進(jìn)行重寫(Override)
1. 當(dāng)子類中出現(xiàn)與父類一模一樣的方法(返回值阱驾, 函數(shù)名就谜, 形參)時, 會出現(xiàn)重寫(Override)操作.
OverrideDemo1.java
/* 怎么對從父類繼承過來的方法進(jìn)行重寫(Override)
* 輸出結(jié)果:
* SuperClass: I am good~
* SubClass: I am excellent~~~
*/
public class OverrideDemo1 {
public static void main(String[] args) {
SubClass sc = new SubClass();
sc.speak();
}
}
class SuperClass {
public void speak() {
System.out.println("SuperClass: I am good~");
}
}
class SubClass extends SuperClass {
@Override? ? ? ? ? ? ? ? ? //@Override表示下面出現(xiàn)的方法會出現(xiàn)重寫操作里覆,由編譯器檢查丧荐,如果達(dá)不到重寫的條件,就會報(bào)錯喧枷。一定程度上增加了代碼的安全性
和健壯性
public void speak() {
super.speak();
System.out.println("SubClass: I am excellent~~~");
}
}
2. 在對父類方法進(jìn)行重寫(Override)操作的時候虹统,子類不允許出現(xiàn)與父類同名同參但是不同返回類型的方法.
OverrideDemo2.java
/* 子類中不允許出現(xiàn)與父類同名同參但是不同返回類型的方法
* 出錯信息:
* OverrideDemo.java:20: error: f() in SubClass cannot override f() in SuperClass
*? public int f() {
*? ? ? ? ? ? ? ? ^
*? ? ? ? ? ? ? ? ? return type int is not compatible with void
*? ? ? ? ? ? ? ? ? OverrideDemo.java:19: error: method does not override or implement a method from a supertype
*? ? ? ? ? ? ? ? ? ? ? @Override
*? ? ? ? ? ? ? ? ? ? ? ? ? ^
*? ? ? ? ? ? ? ? ? ? ? ? ? 2 errors
*/
public class OverrideDemo2 {
public static void main(String[] args) {
}
}
class SuperClass {
public void f() {
}
}
class SubClass extends SuperClass {
@Override
public int f() {
return 1;
}
}
3. 子類重寫父類的方法的訪問權(quán)限要大于或者等于父類中被重寫的方法
OverrideDemo3.java
/* 子類重寫父類的方法的訪問權(quán)限要大于或者等于父類方法的訪問權(quán)限
* 出錯信息:
* OverrideDemo.java:18: error: f() in SubClass cannot override f() in SuperClass
*? protected void f() {
*? ? ? ? ? ? ? ? ? ? ^
*? ? ? ? ? ? ? ? ? ? ? attempting to assign weaker access privileges; was public
*? ? ? ? ? ? ? ? ? ? ? 1 error
*/
public class OverrideDemo3 {
public static void main(String[] args) {
}
}
class SuperClass {
public void f() {
}
}
class SubClass extends SuperClass {
@Override
protected void f() {? ? ? ? ? ? //把這里的訪問權(quán)限改為public即可
}
}
訪問控制符
訪問控制符有:public, protected, default, private