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