java繼承

繼承
  • 1、提高了代碼的複用性,簡化了代碼
  • 2、讓類與類之間產生繼承關係,纔有了後面的多態特性的存在
//父類,基類,超類
class Person5{
	String name;
	int age;
}

//子類
class Student8 extends Person5{ //繼承用 extends 父類名
	void study(){
		System.out.println("學習");
	}
}

//子類
class Teacher extends Person5{
	void teach(){
		System.out.println("教書");
	}
}

public class test_extends {
	public static void main(String[] args){
		Student8 S = new Student8();
		S.study();
		System.out.println(S.age); 
	}
}
  • 子類擁有父類的成員,子類不能擁有父類中被private修飾後的成員
  • java多層繼承,在多層繼承中最下層的子類擁有整個繼承體系的成員,最上層的父類裏面定義所有子類的共性描述
  • java中不支持多繼承,只支持單繼承。因爲多繼承存在安全隱患,當多個父類定義了相同的成員,子類對象不確定運行哪一個
// 父類 動物
class Animal{
	String buru = "哺乳";
}
// 第一級子類 貓科
class MaoKe extends Animal{
	String color;
	void eat(){
		System.out.println("吃");
	}
}
// 第二級子類貓
class Cat1 extends MaoKe{
	void CatchMouse(){
		System.out.println("抓老鼠");
	}
}
//第二級子類獵豹
class Leopaed extends MaoKe{
	void run(){
		System.out.println("奔跑");
	}
}

public class test_extends1 {
	public static void main(String[] args){
		Cat1 c = new Cat1();
		System.out.println(c.buru); //第一級父類的成員變量
		System.out.println(c.color);  //第二級父類的成員變量
		c.eat();
	}
}

成員:成員變量、函數、構造函數

  • this 代表當前對象的引用 this. 變量 首先在本類中找所需要的這個變量,如果沒有找到再從父類中找
  • super 用於訪問當前對象的父類成員, super . 變量 直接在父類中找所需變量
//父類
class Person7{
	String name = "何藝";
}
//子類
class Student7 extends Person7{
	String name = "Hey";
	void show(){
		System.out.println(super.name);  //子類調用父類需要super
		System.out.println(name); 
	}
}
public class test_extends2 {
	public static void main(String[] args){
		Student7 stu = new Student7();
		stu.show();
	}
}

class Weapen{  //武器
	public String power = "我具有攻擊力哦";
	public int speed = 360;

	Weapen(){
		System.out.println("我是父類的構造方法");
	}
}

class Tank extends Weapen{  //坦克
	private String dir = "左";
	public void atack(){
		System.out.println("我是坦克,向"+dir+"方向移動,速度"+super.speed+"攻擊力"+super.power);
	}
}
public class test_extends6 {
	public static void main(String[] args){
		Tank t = new Tank();
		t.atack();
	}
}
  • 當子類中出現和父類中一樣的函數時,當子類對象調用該函數,運行的是子類中的函數,如同父類中的函數被覆蓋了,這種情況就是函數的另一種特性:重寫(覆蓋)
    注意:
  • 子類覆蓋父類時,必須保證子類權限大於等於父類,纔可以覆蓋,否則編譯出錯
  • 訪問權限修飾符:public > default > private
  • 成員前面沒加任何訪問權限,修飾符默認權限爲default
  • 靜態的函數只能覆蓋靜態的

區分:

  • 重載:只看同名的方法參數列表
  • 重寫:子父類方法要一模一樣
class Animal1{
	String type;
	void run(){
		System.out.println("跑步中");
	}
}
class Dog1 extends Animal1{
	void run(){
		type = "小白";
		System.out.println(type+"正跑過來");
	}
}
public class test_extends3 {
	public static void main(String[] args){
		Dog1 dog = new Dog1();
		dog.run();
	}
}

class Animal2{
	void show(){
		System.out.println("我是父類");
	}
	void sleep(){
		System.out.println("動物在睡覺");
	}
}

class Cat2 extends Animal2{
	void show(String name){
		System.out.println(name);
	}
	void sleep(){
		System.out.println("貓在睡覺");
	}
}
public class test_extends5 {
	public static void main(String[] args){
		Cat2 cat = new Cat2();
		cat.show("小貓咪");
		cat.sleep();
	}
}
  • 有了子父類之後構造函數的特點:
  • 在對子類對象進行初始化的時候,父類的構造方法也會運行,那是因爲子類的構造函數默認第一行有一條隱式語句 super()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章