继承是面向对象编程中的一个重要特性,它允许我们在一个类的基础上创建一个新的类,新的类可以继承原类的属性和方法,并可以添加自己的属性和方法。这种方式可以有效地实现代码复用,减少重复代码的编写。 举例来说明一下吧:
🎉小花家里养了一只可爱的小狗狗和一条有漂亮尾巴的小金鱼,小狗今年3岁,金鱼1岁,小花给小狗取名为“旺财”,给小金鱼取名为“贝贝”,小狗是白色的,金鱼是红色的,小狗会汪汪叫,而金鱼不会叫,小狗吃狗粮,而金鱼吃鱼粮…
通过上述例子,我们可以发现,小狗和小金鱼有许多相同的属性,如都有“名字”,“年龄”,“花色”,当然也有不同的属性或行为,如“吃食不同”,“会不会叫”… 如果我们分开写,写出小狗类,和小金鱼类,我们会发现代码有很多相同的语句,就会显得代码过于冗长。 那能否将这些共性抽取呢?面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用
有了上面的铺垫,我们就来实战一下,不过在此之前,我们要学习一下继承的语法
🪄在 Java 中,使用 extends 关键字来实现继承。 例如,我们可以定义一个名为 Animal 的类,然后创建一个名为 Dog 类来继承 Animal 类: class Dog extends Animal 此时Dog 类叫做子类或者派生类,Animal 类叫做父类,基类或者超类
具体实现如下:
public class Animal{
String name;
int age;
String color;
public void sleep(){
System.out.println(name + "正在睡觉");
}
}
public class Dog extends Animal{
void eat(){
System.out.println(name + "正在吃狗粮....");
}
void bark(){
System.out.println(name + "汪汪汪~~~");
}
}
public class Fish extends Animal{
void eat(){
System.out.println(name + "正在吃狗粮....");
}
void bark(){
System.out.println(name + "不会叫");
}
}
在这个例子中,Dog 类 和Fish 类 继承了 Animal 类的所有属性和方法,并且可以添加自己的特有属性和方法。这样,我们就可以将一些通用的属性和方法放在 Animal 类中,然后在 Dog 类中只需要关注狗的特有属性和方法,Fish 类 只需关注鱼特有的属性和方法即可,从而实现了代码的复用。
🌟在子类方法中 或者 通过子类对象访问成员时:
举个简单的小例子:
public class Base {
int a;
int b;
int c;
}
public class Derived extends Base{
int a; // 与父类中成员a同名,且类型相同
char b; // 与父类中成员b同名,但类型不同
public void method(){
a = 100; // 访问子类自己新增的a
b = 101; // 访问父类继承的b
c = 102; // 子类没有c,访问的肯定是从父类继承下来的c
d = 103; // 编译失败,因为父类和子类都没有定义成员变量b
}
}
由于设计不好,或者因场景需要,子类和父类中可能会存在相同名称的成员, 如果要在子类方法中访问父类同名成员时,该如何操作?直接访问是无法做到的,Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。
🌟【注意事项】
也来举个例子吧:
class Parent {
public int a = 10;
protected int b = 20;
int c = 30; // 默认修饰符
private int d = 40;
public Parent() {
System.out.println("Parent constructor called");
}
public void printMembers() {
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
// System.out.println("d = " + d); // 无法访问,因为 d 是 private 修饰的
}
}
class Child extends Parent {
public int e = 50;
public Child() {
super(); // 调用父类的构造方法
System.out.println("Child constructor called");
}
public void printMembers() {
super.printMembers(); // 调用父类的方法
System.out.println("e = " + e);
}
}
在上面的示例中, Child 类继承了 Parent 类,并在 Child 类的构造方法中使用 super() 调用了父类的构造方法。在 printMembers() 方法中,使用 super.printMembers() 调用了父类的方法。 此时是不是还是对super关键字不是很理解呢?,没关系,我们再来理解一遍!!!
🥳super 表示的是从父类继承过来的数据的引用,指定告诉编译器,我们访问的是父类的成员或方法 super 的出现,增强代码的可读性
🌟注意:
😊【相同点】
🤕【不同点】
🥳OK,今日分享就到这里啦,上述如有错误,还请各位大佬给予指正,一定及时修改!!!✌️