繼承
1.繼承的概念:子類繼承父類子類就自動擁有父類非私有的成員變數

2.繼承的格式
/**
* 定義父類:
*/
public class Employee{
//定義屬性
String name;
int age;
//定義方法
public void work(){
System.out.println("嘔心瀝血的作業!");
}
}
/*
定義工人類:工人是公司員工的一種,所以可以繼承員工類
什么時候使用繼承:我是你的一種的時候(is...a)
繼承的格式:
public class 子類 extends 父類{}
子類:Worker
父類:Employee
繼承的特點(重點):
子類繼承父類,子類就會用用父類非私有的成員變數和成員方法
在子類中可以定義子類特有的成員
*/
public class Worker extends Employee{
//定義子類特有的列印姓名和年齡的方法
public void show(){
System.out.println(name+"\t"+age);
}
}
/*
定義監工類,是公司員工的一種,所以可以繼承員工類
*/
public Classs Overseer extends Employee{
}
/*
測驗繼承:
測驗子類繼承父類之后,是否會自動擁有父類非私有的成員
繼承的好處:
1.可以提高代碼的復用性(重復使用)
2.繼承使類與類之間產生了關系,是多型的前提
*/
public class DemoExtends {
public static void main(String[] args) {
//創建子類Worker 物件
Worker t = new Worker ();
//使用子類繼承自父類的成員變數
t.name = "小白龍";
t.age = 18;
//使用子類繼承自父類的成員方法
t.work();
//使用子類自己特有的成員
t.show();
//創建子類Overseer 物件
Overseer br = new Overseer ();
//使用子類繼承自父類的成員變數
br.name = "仝大美女";
br.age = 18;
//使用子類繼承自父類的成員方法
br.work();
}
}
注意:只能繼承非私有的變數和方法
繼承后的特點--------成員變數
public class Fu {
int a= 10;
}
public class Zi2 extends Fu {
int a = 100;
int b = 200;
}
/*
繼承后的特點—成員變數:
1.子類有使用子類自己的成員變數
2.子類沒有使用子類繼承自父類的成員變數
3.子類和父類都沒有,編譯報錯
*/
public class Demo01Variable {
public static void main(String[] args) {
//創建子類物件
Zi1 zi1 = new Zi1();
System.out.println(zi1.a);//10 子類繼承自父類的
System.out.println(zi1.b);//20 使用子類自己的
//創建子類物件
Zi2 zi2 = new Zi2();
System.out.println(zi2.a);//100 使用子類自己的
System.out.println(zi2.b);//200 使用子類自己的
//System.out.println(zi2.c);//Cannot resolve symbol 'c' 子類父類都沒有編譯報錯
}
}
注意:成員方法跟成員變數一樣也是該情況
方法重寫(Override)
public classFu{
public void show01(){
System,out,println("Fu類的show01方法");
}
}
/**
*方法重寫:發生在兩個類之間,在子類出現了和父類一模一樣的方法,方法叫做重寫(Override)
* 一模一樣:
* 1,方法名一樣
* 2,引數串列一樣
* 3,回傳值型別一樣
* 4,修飾符一樣(子類修飾的權限符要大于等于父類修飾的權限符)
* 注解:
* @override:檢測是否為重寫的方法
*
* 方法多載:發生在一個類當中,在一個類中方法名相同,引數串列不同(Overload)
*
*/
public class Zi extends Fu{
@Override
public viod show01(){
System.out.println("子類重寫父類方法");
}
public void show01(int a){
System.out.println("子類自己特有的帶參show01多載方法"+a);
}
}
public class DemoOverride{
public static void main(String[] args){
創建物件
Zi zi = new Zi();
zi.show01(); //呼叫的是子類重寫的父類方法
zi.show01(10);
}
}
子類重寫父類方法的注意事項:
1. 子類方法覆寫(重寫)父類方法,必須要保證權限大于等于父類權限。
四大權限修飾符:
public:公共的
protected:受保護的
:默認的,不寫就是默認的
private:私有的
2. 子類方法覆寫(重寫)父類方法,回傳值型別、函式名和引數串列都要一模一樣。
3. 私有方法不能被重寫(父類私有成員子類是不能繼承的)
public class Fu {
protected void show01(){
System.out.println("Fu類的show01方法!");
}
void show02(){
System.out.println("Fu類的show02方法!");
}
public void show03(){
System.out.println("Fu類的show03方法!");
}
public void show04(String a){
System.out.println("Fu類的show04方法!");
}
private void show05(String a){
System.out.println("Fu類的show05方法!");
}
}
public class Zi extends Fu {
protected void show01(){
System.out.println("Zi類重寫Fu類的show01方法!");
}
public void show02(){
System.out.println("Zi類重寫Fu類的show02方法!");
}
//子類重寫父類的方法,必須保證修飾符大于等于父類
/*void show03(){
System.out.println("Zi類重寫Fu類的show03方法!");
}*/
//子類方法的引數和父類不一樣,就不是方法重寫
/*@Override
public void show04(){
System.out.println("Fu類的show04方法!");
}*/
//Method does not override method from its superclass 私有方法不能重寫
//就相當于在子類中定義了一個自己特有的方法,恰好和父類名字是一樣的
/*@Override
private void show05(String a){
System.out.println("Zi類的show05方法!");
}*/
}
繼承后的特點-----構造方法
public class Fu{
int a = 10;
public Fu(){
System.out.println("Fu類的空參構造方法!"+a);
}
}
public class Zi extends Fu{
/*
Fu類的空參構造方法!10
Zi類的空參構造方法!10
在子類的構造方法中的第一行有一個默認的,super();作用是呼叫父類的空參構造方法
子類想要使用繼承自父類的內容(成員變數、成員方法)必須先把父類加載到記憶體中,這樣子類才可以使用
*/
public Zi(){
super();
System.out.println("Zi類的空參構造方法!"+a);
}
}
子父類記憶體圖解

上圖結果:Fu類的構造方法!10 Zi類的構造方法!1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/274943.html
標籤:Java相關
上一篇:泛型轉換
下一篇:【C++】 C++知識點總結
