日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java狐狸游戏_Java继承

發布時間:2023/12/31 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java狐狸游戏_Java继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一種類與類之間的關系

使用已存在的類的定義作為基礎建立新類

新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類

子類只能繼承一個父類

package com.imooc.animal;

public class Animal {

private String name;//昵稱

private int month;//月份

private String species;//品種

public Animal() {

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getMonth() {

return month;

}

public void setMonth(int month) {

this.month = month;

}

public String getSpecies() {

return species;

}

public void setSpecies(String species) {

this.species = species;

}

//吃東西

public void eat() {

System.out.print(this.getName()+"吃東西");

}

}

package com.imooc.animal;

public class Cat extends Animal{

private double weight;//體重

public Cat() {

}

public double getWeight() {

return weight;

}

public void setWeight(double weight) {

this.weight = weight;

}

//跑動的方法

public void run() {

//子類可以訪問父類非私有成員

System.out.print(this.getName()+"是一只"+this.getSpecies()+",它在快樂地奔跑");

}

}

package com.imooc.animal;

public class Dog extends Animal {

private String sex; //性別

public Dog() {

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

//睡覺的方法

public void sleep() {

System.out.println(this.getName()+"現在"+this.getMonth()+"月大"+",正在睡覺");

}

/*

* 方法重載:

* 1.同一個類中

* 2.方法名相同,參數列表不同(參數順序、個數、類型)

* 3.方法返回值、訪問修飾符任意

* 4.與方法的參數名無關

private String sleep(String name) {

return "";

}

public void sleep(String name,int month) {

}

public void sleep(int month,String name) {

}

* */

}

import com.imooc.animal.Animal;

import com.imooc.animal.Cat;

import com.imooc.animal.Dog;

public class Test {

public static void main(String[] args) {

Cat one=new Cat();

one.setName("花花");

one.setSpecies("中華田園貓");

one.eat();

one.run();

Dog two=new Dog();

two.setName("妞妞");

two.setMonth(1);

two.eat();

two.sleep();

//父類不可以訪問子類特有成員,即便它是公有的

Animal three=new Animal();

//three.run();//報錯

}

}

方法重寫

語法規則:

在子類中定義

方法名和參數類型、順序、個數(不包括參數名)都要與父類繼承的方法相同

public void eat(String name) {

System.out.println(name+"在吃東西");

}

public void jump() {

System.out.println("跳躍是一種本能");

}

/*

* 方法重寫:

* 1.有繼承關系的子類中

* 2.方法名相同,參數列表相同(參數順序、個數、類型)

* 3.與方法的參數名無關

* 4.方法的返回值和訪問修飾符是可以允許有變化的

*/

//當子類重寫父類方法后,子類對象調用的是重寫后的方法

public void eat() {

System.out.println(this.getName()+"最近沒有食欲");

}

public void eat(String month) {

System.out.println(month+"最近沒有食欲");

}

/*報錯:與父類中的jump方法不兼容

* 返回值為void或者基本數據類型,要求父子完全一致

* 返回值為引用類型時,可以是父類或其子類

public int jump() {

System.out.println("狗狗是助跑式跳躍");

return 1;

}

*/

在子類中可以定義與父類當中重名的屬性,優先執行子類當中的賦值

訪問修飾符

公有的:public:允許在任意位置訪問

私有的:private:只允許在本類中進行訪問

受保護的:protected:允許在當前類、同包子類/非子類、跨包子類調用;跨包非子類不允許

默認:允許在當前類、同包子類/非子類調用;跨包子類/非子類不允許調用

訪問修飾符對方法重寫的影響

訪問修飾符的訪問范圍需要大于等于父類的訪問范圍

super關鍵字的使用

super:父類對象的引用

super.eat();

super.x=4;

tip:父類的構造方法不允許被繼承、不允許被重寫,但是會影響子類對象的實例化

子類的構造的過程中必須調用其父類的構造方法

如果子類的構造方法中沒有顯式標注,則系統默認調用父類無參構造方法

如果子類構造方法中既沒有顯式標注,且父類中沒有無參的構造方法,則編譯一定出錯

Implicit super constructor Parent1() is undefined. Must explicitly invoke another constructor

隱式的父類無參構造方法未找到,必須顯式地調用另外的構造方法

使用super()可以指定父類構造方法,super()必須放在子類構造方法有效代碼第一行

super();

super(String name,int month);

this和super都不能在靜態方法中調用,兩者在調用構造方法時不能共存

繼承后的初始化順序

類的加載:父類靜態成員--子類靜態成員--子類對象實例化(父類對象構造,包括屬性、構造代碼塊、構造方法--子類對象構造)

訪問修飾符不影響靜態成員加載順序,跟書寫位置有關

Object類

Object類是所有類的父類

一個類沒有使用extends關鍵字明確標識繼承關系,則默認繼承Object類(包括數組)

Java中的每個類都可以使用Object中定義的方法

子類中方法可以不經過重寫,直接重載父類的方法

例如equals()方法(等效于==),當繼承Object中的equals方法時,比較的是兩個引用是否指向同一個對象,即是否指向同一片內存空間,子類可以通過重寫equals方法的形式,改變比較的內容

Animal one=new Animal("花花",2);

Animal two=new Animal("花花",2);

boolean flag=one.equals(two);

System.out.println("one 和 two的引用比較"+flag);

System.out.println("one 和 two的引用比較"+(one==two));

String str1=new String("hello");

String str2=new String("hello");

flag=str1.equals(str2);

System.out.println("str1 和 str2的引用比較"+flag);

System.out.println("str1 和 str2的引用比較"+(str1==str2));

public boolean equals(Object obj) {

if(obj==null) {

return false;

}

//強制轉換為Animal類型

Animal temp=(Animal)obj;

//字符串用equals()比較,int型數據用==比較

if(this.getName().equals(temp.getName())&&(this.getMonth()==temp.getMonth())) {

return true;

}else {

return false;

}

}

//方法重載

public boolean equals(Animal obj) {

if(obj==null) {

return false;

}

if(this.getName().equals(obj.getName())&&(this.getMonth()==obj.getMonth())) {

return true;

}else {

return false;

}

}

if語句中,可以兩個都用equals或者兩個都用==進行比較嗎?

由于通過Animal類型參數重載了equals(),所以代碼運行時自動定位類型匹配方法

//重寫toString()方法

public String toString() {

return "昵稱:"+this.getName()+";年齡:"+this.getMonth();

}

/*toString測試:

* 1.輸出對象名時,默認會直接調用類中的toString方法

* 2.繼承Object中的toString方法時,輸出對象的字符串表示形式:類型信息+@+地址信息

* 3.子類可以通過重寫toString方法的形式,改變輸出的內容以及表現形式

*/

System.out.println(one.toString());

System.out.println(one);

System.out.println(str1);

==比較的是變量里存儲的值,對于基本數據類型,變量里存儲的是數值,==比較的是數值是否相等;對于引用數據類型(例如String、自定義類等),變量里存的是對象的內存地址,==默認比較的是是否指向同一內存空間,也就是地址是否相同。

final

final class:該類沒有子類,不允許被繼承 可寫成public final class或final public class

不允許子類重寫,在方法的返回值前加final,同時可以被子類正常繼承使用,不能修飾構造方法

變量分為以下兩類:

final 方法內局部變量:只要在具體被使用之前進行賦值即可,一旦賦值不允許被修改

final 類當中的成員屬性:賦值過程:1.定義直接初始化 2.構造方法 3. 構造代碼塊

不賦值系統會報錯

提示菜單快捷鍵:alt+/ 可以快速生成重寫方法模板

final 引用數據類型 實例化后不允許再進行引用地址的修訂,但屬性值仍可更改

static+final 表示全局不允許修訂的內容(方法和變量),如配置信息

注解

可以聲明在包、類、屬性、方法、局部變量、方法參數等的前面,用來對這些元素進行說明、注釋

按照運行機制可以分為:源碼注解(@Override)、編譯時注解(@NotNull)、運行時注解(甚至會影響到運行邏輯@Autowired)

在當前階段保留,在進行下一階段時會被丟棄

按照來源分:來自JDK的注解(@Override)、來自第三方的注解(@Autowired)、我們自己定義的注解

元注解

定義注解的注解,對注解進行標注

父類的靜態方法無法被重寫

public static Animal create(){

return new Animal();

}

public static Dog create(){

return new Dog();

}

不會報錯的原因是:系統認為create是Dog類專屬的一個方法,與父類無關,更不是方法重寫

總結

以上是生活随笔為你收集整理的java狐狸游戏_Java继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。