Java基础day10
Java基礎(chǔ)day10
- Java基礎(chǔ)day10-繼承&修飾符
- 1 繼承
- 1.1 繼承的實(shí)現(xiàn)
- 1.2 繼承的好處和弊端
- 2. 繼承中的成員訪問特點(diǎn)
- 2.1 繼承中變量的訪問特點(diǎn)
- 2.2 super
- 2.3 繼承中構(gòu)造方法的訪問特點(diǎn)
- 2.4 繼承中成員方法的訪問特點(diǎn)
- 2.5 super內(nèi)存圖
- 2.6 方法重寫
- 2.7 方法重寫的注意事項(xiàng)
- 2.8. Java中繼承的注意事項(xiàng)
- 3. 繼承練習(xí)
- 3.1 老師和學(xué)生
- 3.2 貓和狗
- 4. 修飾符
- 4.1 package
- 4.2 import
- 4.3 權(quán)限修飾符
- 4.4 final
- 4.5 final修飾局部變量
- 4.6 static
- 4.7 static訪問特點(diǎn)
Java基礎(chǔ)day10-繼承&修飾符
1 繼承
1.1 繼承的實(shí)現(xiàn)
- 繼承的概念
繼承是面向?qū)ο笕筇卣髦?#xff0c;可以使得子類具有父類的屬性和方法,還可以在子類中重新定義,以及追加屬性和方法 - 實(shí)現(xiàn)繼承的格式
繼承通過extends實(shí)現(xiàn)
格式:class 子類 extends 父類 { }
舉例:class Dog extends Animal { } - 繼承帶來的好處
繼承可以讓類與類之間產(chǎn)生關(guān)系,子父類關(guān)系,產(chǎn)生子父類后,子類則可以使用父類中非私有的成員。
1.2 繼承的好處和弊端
- 繼承好處
提高了代碼的復(fù)用性(多個(gè)類相同的成員可以放到同一個(gè)類中)
提高了代碼的維護(hù)性(如果方法的代碼需要修改,修改一處即可) - 繼承弊端
繼承讓類與類之間產(chǎn)生了關(guān)系,類的耦合性增強(qiáng)了,當(dāng)父類發(fā)生變化時(shí)子類實(shí)現(xiàn)也不得不跟著變化,削弱了子類的獨(dú)立性 - 繼承的應(yīng)用場(chǎng)景:
使用繼承,需要考慮類與類之間是否存在is…a的關(guān)系,不能盲目使用繼承
is…a的關(guān)系:誰是誰的一種,例如:老師和學(xué)生是人的一種,那人就是父類,學(xué)生和老師就是子類
2. 繼承中的成員訪問特點(diǎn)
2.1 繼承中變量的訪問特點(diǎn)
在子類方法中訪問一個(gè)變量,采用的是就近原則。
2.2 super
- this&super關(guān)鍵字:
this:代表本類對(duì)象的引用 - super:代表父類存儲(chǔ)空間的標(biāo)識(shí)(可以理解為父類對(duì)象引用)
this和super的使用分別 - 成員變量:
this.成員變量 - 訪問本類成員變量
super.成員變量 - 訪問父類成員變量 - 成員方法:
this.成員方法 - 訪問本類成員方法
super.成員方法 - 訪問父類成員方法 - 構(gòu)造方法:
this(…) - 訪問本類構(gòu)造方法
super(…) - 訪問父類構(gòu)造方法
2.3 繼承中構(gòu)造方法的訪問特點(diǎn)
注意:子類中所有的構(gòu)造方法默認(rèn)都會(huì)訪問父類中無參的構(gòu)造方法
子類會(huì)繼承父類中的數(shù)據(jù),可能還會(huì)使用父類的數(shù)據(jù)。所以,子類初始化之前,一定要先完成父類數(shù)據(jù)的初始化, 原因在于,每一個(gè)子類構(gòu)造方法的第一條語句默認(rèn)都是:super()
2.4 繼承中成員方法的訪問特點(diǎn)
通過子類對(duì)象訪問一個(gè)方法 1. 子類成員范圍找 2. 父類成員范圍找 3. 如果都沒有就報(bào)錯(cuò)(不考慮父親的父親…)2.5 super內(nèi)存圖
2.6 方法重寫
- 1、方法重寫概念 子類出現(xiàn)了和父類中一模一樣的方法聲明(方法名一樣,參數(shù)列表也必須一樣) - 2、方法重寫的應(yīng)用場(chǎng)景 當(dāng)子類需要父類的功能,而功能主體子類有自己特有內(nèi)容時(shí),可以重寫父類中的方法,這樣,即沿襲了 父類的功能,又定義了子類特有的內(nèi)容 - 3、Override注解 用來檢測(cè)當(dāng)前的方法,是否是重寫的方法,起到【校驗(yàn)】的作用2.7 方法重寫的注意事項(xiàng)
方法重寫的注意事項(xiàng)
示例代碼
public class Fu {private void show() {System.out.println("Fu中show()方法被調(diào)用");}void method() {System.out.println("Fu中method方法被調(diào)用");} }public class Zi extends Fu{@Override/* 編譯【出錯(cuò)】,子類不能重寫父類私有的方法*//*private void show(){System.out.println("Zi中show方法被調(diào)用");}*//* 編譯【出錯(cuò)】,子類重寫父類方法的時(shí)候,訪問權(quán)限需要大于等于父類 *//*private void method (){System.out.println("zi中method方法被調(diào)用");}*//* 編譯【通過】,子類重寫父類方法的時(shí)候,訪問權(quán)限需要大于等于父類 */public void method () {System.out.println("zi中method方法被調(diào)用");} }2.8. Java中繼承的注意事項(xiàng)
- Java中繼承的注意事項(xiàng)
錯(cuò)誤范例:class A extends B, C { }
- 多層繼承
示例代碼:
3. 繼承練習(xí)
3.1 老師和學(xué)生
需求: 定義老師類和學(xué)生類,然后寫代碼測(cè)試;最后找到老師類和學(xué)生類當(dāng)中的共性內(nèi)容,抽取出一個(gè)父 類,用繼承的方式改寫代碼,并進(jìn)行測(cè)試 步驟: ①定義老師類(姓名,年齡,教書()) ②定義學(xué)生類(姓名,年齡,學(xué)習(xí)()) ③定義測(cè)試類,寫代碼測(cè)試 ④共性抽取父類,定義人類(姓名,年齡) ⑤定義老師類,繼承人類,并給出自己特有方法:教書() ⑥定義學(xué)生類,繼承人類,并給出自己特有方法:學(xué)習(xí)() ⑦定義測(cè)試類,寫代碼測(cè)試示例代碼:
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;} }public class Teacher extends Person {public Teacher() {}public Teacher(String name, int age) {super(name, age);}public void teach(){System.out.println("教導(dǎo)能力");} }public class Student extends Person{public Student() {}public Student(String name, int age) {super(name, age);}public void study(){System.out.println("學(xué)習(xí)能力");} }public class demo {public static void main(String[] args) {Teacher t = new Teacher();t.setName("林青霞");t.setAge(30);System.out.println(t.getName()+","+t.getAge());t.teach();Teacher t2 = new Teacher("林青霞",30);System.out.println(t2.getName()+","+t2.getAge());t.teach();Student s = new Student("張三",23);System.out.println(s.getName()+","+s.getAge());s.study();} }3.2 貓和狗
-
需求:
請(qǐng)采用繼承的思想實(shí)現(xiàn)貓和狗的案例,并在測(cè)試類中進(jìn)行測(cè)試 -
分析:
①貓:
成員變量:姓名,年齡
構(gòu)造方法:無參,帶參
成員方法:get/set方法,抓老鼠()
②狗:
成員變量:姓名,年齡
構(gòu)造方法:無參,帶參
成員方法:get/set方法,看門()
③共性:
成員變量:姓名,年齡;
構(gòu)造方法:無參,帶參;
成員方法:get/set方法步驟:
1、定義動(dòng)物類(Animal) 【成員變量:姓名,年齡】【 構(gòu)造方法:無參,帶參】【成員方法:get/set方法】
2、定義貓類(Cat),繼承動(dòng)物類 【構(gòu)造方法:無參,帶參】【成員方法:抓老鼠() 】
3、定義狗類(Dog),繼承動(dòng)物類 }
【構(gòu)造方法:無參,帶參】【成員方法:看門() 】
4、定義測(cè)試類(AnimalDemo),寫代碼測(cè)試
示例代碼:
public class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;} }public class Cat extends Animal{public Cat() {}public Cat(String name, int age) {super(name, age);}public void catchMouse(){System.out.println("抓老鼠");} }public class Dog extends Animal{public Dog() {}public Dog(String name, int age) {super(name, age);}public void lookdoor(){System.out.println("看門");} }public class demo {public static void main(String[] args) {Cat c1 = new Cat();c1.setName("加菲貓");c1.setAge(2);System.out.println(c1.getName()+","+c1.getAge());c1.catchMouse();Cat c2 = new Cat("橘貓",2);System.out.println(c2.getName()+","+c2.getAge());c2.catchMouse();} }4. 修飾符
4.1 package
- 1、包的概念
包就是文件夾,用來管理類文件的 - 2、包的定義格式
package 包名; (多級(jí)包用.分開)
例如:package com.heima.demo; - 3、帶包編譯&帶包運(yùn)行 帶包編譯:
· javac –d . 類名.java
例如:javac -d . com.heima.demo.HelloWorld.java
帶包運(yùn)行:
· java 包名+類名
例如:java com.heima.demo.HelloWorld
4.2 import
導(dǎo)包的意義
使用不同包下的類時(shí),使用的時(shí)候要寫類的全路徑,寫起來太麻煩了
為了簡(jiǎn)化帶包的操作,Java就提供了導(dǎo)包的功能
導(dǎo)包的格式
格式:import 包名;
范例:import java.util.Scanner;
示例代碼
public class demo {public static void main(String[] args) {java.util.Scanner sc = new java.util.Scanner(System.in);} }import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner sc = new (System.in);} }4.3 權(quán)限修飾符
4.4 final
- fianl關(guān)鍵字的作用
final代表最終的意思,可以修飾成員方法,成員變量,類 - final修飾類、方法、變量的效果
fianl修飾類:該類不能被繼承(不能有子類,但是可以有父類)
final修飾方法:該方法不能被重寫
final修飾變量:表明該變量是一個(gè)常量,不能再次賦值
4.5 final修飾局部變量
- fianl修飾基本數(shù)據(jù)類型變量
final 修飾指的是基本類型的數(shù)據(jù)值不能發(fā)生改變 - final修飾引用數(shù)據(jù)類型變量
final 修飾指的是引用類型的地址值不能發(fā)生改變,但是地址里面的內(nèi)容是可以發(fā)生改變的
舉例:
4.6 static
- static的概念
static關(guān)鍵字是靜態(tài)的意思,可以修飾【成員方法】,【成員變量】 - static修飾的特點(diǎn)
示例代碼:
public class Student {public String name;public int age;public static String university;public Student() {}public void show() {System.out.println(name + "," + age);} }public class demo {public static void main(String[] args) {Student.university = "shu";Student s1 = new Student();s1.name = "林青霞";s1.age = 30;s1.show();} }4.7 static訪問特點(diǎn)
- static的訪問特點(diǎn)
非靜態(tài)的成員方法
能訪問靜態(tài)的成員變量
能訪問非靜態(tài)的成員變量
能訪問靜態(tài)的成員方法
能訪問非靜態(tài)的成員方法 - 靜態(tài)的成員方法
能訪問靜態(tài)的成員變量
能訪問靜態(tài)的成員方法 - 總結(jié)成一句話就是: 靜態(tài)成員方法只能訪問靜態(tài)成員
總結(jié)
以上是生活随笔為你收集整理的Java基础day10的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础day9
- 下一篇: spring boot配置logback