关于Java的继承
继承将一个类中的变量和方法传递给其他类。
Java,Ruby和Python等面向对象编程语言具有的特点。
将作为基础的类称为父类(超类、基类),将继承它的类称为子类(子类、派生类)。
继承的形象
动物(父类)
属性
· 名字(name)
· 年龄(age)
方法
· 吃饭(eat)
· 散步(walk)
请用汉语本地化地转述以下内容,只需要一个选项:
↓↓
狗(子类)
新增方法
·吠叫(吠叫)
·奔跑(奔跑)
人类(子类)
附加方法
– 说话(talk)
– 工作(work)
你能用中文把以下句子意思改写一下吗?只需要给出一个选项:
– The movie was so impactful that it made me cry.
当创建具有共同项目和属性的多个类时,可以使用继承,就像上面的图像一样。
//親クラスとなる動物クラス
public class Animal{
public String name; //名前
public int age; //年齢
public void eat(String something) {
//食べる
System.out.println(something + "を食べました");
}
public void walk(int a){
//歩く
System.out.println(a.toString(); + "メートル歩きました");
}
}
//動物クラスを継承して作った、犬クラス
public class Dog extends Animal {
//吠える
public void bark(){
System.out.println("ワン");
}
//走る
public void run() {
}
}
//動物クラスを継承して作った、人間クラス
public class Human extends Animal {
//しゃべる
public void talk(String tk){
System.out.println("「" + tk + "」");
}
//仕事をする
public void work(){
}
}
使用继承的好处
编程的行数减少了,也节省了时间。
如果不使用继承的话,
//動物クラスを継承しないで作った、犬クラス
public class Dog {
public String name; //名前
public int age;//年齢
public void eat(String something) {
//食べる
System.out.println(something + "を食べました");
}
public void walk(int a){
//歩く
System.out.println(a.toString(); + "メートル歩きました");
}
//吠える
public void bark(){
System.out.println("ワン");
}
//走る
public void run() {
}
}
//動物クラスを継承しないで作った、人間クラス
public class Human extends Animal {
public String name; //名前
public int age;//年齢
public void eat(String something) {
//食べる
System.out.println(something + "を食べました");
}
public void walk(int a){
//歩く
System.out.println(a.toString(); + "メートル歩きました");
}
//しゃべる
public void talk(String tk){
System.out.println("「" + tk + "」");
}
//仕事をする
public void work(){
}
}
如果不使用继承的话,
//動物クラスを継承しないで作った、犬クラス
public class Dog {
public String name; //名前
public int age;//年齢
public void eat(String something) {
//食べる
System.out.println(something + "を食べました");
}
public void walk(int a){
//歩く
System.out.println(a.toString(); + "メートル歩きました");
}
//吠える
public void bark(){
System.out.println("ワン");
}
//走る
public void run() {
}
}
//動物クラスを継承しないで作った、人間クラス
public class Human extends Animal {
public String name; //名前
public int age;//年齢
public void eat(String something) {
//食べる
System.out.println(something + "を食べました");
}
public void walk(int a){
//歩く
System.out.println(a.toString(); + "メートル歩きました");
}
//しゃべる
public void talk(String tk){
System.out.println("「" + tk + "」");
}
//仕事をする
public void work(){
}
}
在子类中重复编写了父类的变量和方法。❌
而且,如果尝试修改父类,则需要修改两个地方。❌
如果将父类合并为一个,修改只需一个地方。⭕️
将父类的变量和方法都重写在子类中。❌
而且,如果想要修改父类,则需要修改两个地方。❌
如果把父类合并成一个,只需要在一个地方进行修改。⭕️
2、可以同时处理具有相同继承基类的类们。
例如,当想要将所有动物都放在一辆卡车上时,只要它们都继承自同一个动物类,就可以将它们作为一个整体进行变量处理。
//動物クラスの型のオブジェクトを格納する配列
Animal[] animals;
//犬も、人間も、まとめられる
animals = { new Dog(); new Human()};
继承的特点
在子类中可以使用父类的字段(变量,方法)。动物(Animal)的名称(name)和食物(eat)也是狗(dog)拥有的。
也就是说,父类的功能虽然看不见,但子类也拥有。
在子类中可以重写(覆盖)父类的方法。可以覆盖继承的方法。
这样可以使相同的方法具有不同的功能。
但是,参数必须保持一致。
可以继承继承(子类)。可以将子类作为父类,并创建子类的子类。
public class Animal {
}
public class Dog extends Animal {
}
pubic class WhiteDog extends Dog {
public String color = "white";
}
//動物クラスの型のオブジェクトを格納する配列
Animal[] animals;
//犬も、人間も、まとめられる
animals = { new Dog(); new Human()};
在子类中可以使用父类的字段(变量,方法)。动物(Animal)的名称(name)和食物(eat)也是狗(dog)拥有的。
也就是说,父类的功能虽然看不见,但子类也拥有。
在子类中可以重写(覆盖)父类的方法。可以覆盖继承的方法。
这样可以使相同的方法具有不同的功能。
但是,参数必须保持一致。
可以继承继承(子类)。可以将子类作为父类,并创建子类的子类。
public class Animal {
}
public class Dog extends Animal {
}
pubic class WhiteDog extends Dog {
public String color = "white";
}
这样可以使相同的方法具有不同的功能。
但是,参数必须保持一致。
可以继承继承(子类)。可以将子类作为父类,并创建子类的子类。
public class Animal {
}
public class Dog extends Animal {
}
pubic class WhiteDog extends Dog {
public String color = "white";
}
public class Animal {
}
public class Dog extends Animal {
}
pubic class WhiteDog extends Dog {
public String color = "white";
}
创建一个子类作为白色狗。
家族の財産を継承する際の留意点
使用final关键字修饰的父类字段禁止被重写。如果加上 final,在代码中就无法进行覆写的方法。
当不希望被随意修改处理时使用。
无法同时继承两个类。
class Tuna extends Animal, Fish
当不希望被随意修改处理时使用。
无法同时继承两个类。
class Tuna extends Animal, Fish
class Tuna extends Animal, Fish
上述的情况是,对于金枪鱼想要同时继承动物和鱼的特征,但是无法实现❌
构造函数不会被继承,会隐式执行。※ 构造函数是指在从类中创建对象时自动执行的方法
public Dog extends Animal {
//コンストラクタ
Dog(){
}
}
public Dog extends Animal {
//コンストラクタ
Dog(){
super();
}
}
public Dog extends Animal {
//コンストラクタ
Dog(){
}
}
public Dog extends Animal {
//コンストラクタ
Dog(){
super();
}
}
上述的代码有着相同的含义。
即使在子类中尝试重写构造函数,隐式地也会执行父类的构造函数。
即使子类没有构造函数,也会执行父类的构造函数。