在java中继承的含义就是 子类继承父类的成员跟方法
继承的最大意义:让代码实现复用
Dog类通过 extends Animal 这样Dog 就成了 Animal的子类
Dog 也可以叫做 派生类
Animal 也可以叫做 : 基类 或者 超类

在main方法中 通过Dog类型 ,new 一个dog对象,那么通过引用变量就可以调用父类中的成员变量跟成员方法
class Animal {
public String name;
public int age;
public void fun () {
System.out.println("父类的方法");
}
}
class Dog extends Animal {
public String color;
public void poll () {
System.out.println("子类的方法");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "三月";
dog.age = 10;
dog.fun();
}
}
运行结果为:

在继承中有几个需要了解的点: 接下来就让我们先看第一个
构造方法: 在继承关系上,当我们在构造子类的时候,首先要通过子类去帮父类进行构造
先看下下面这个代码:
我们知道在Dog类中会自动提供一个无参构造方法,那下面报错的原因是什么:
回到上面那句话,我们要通过子类的构造方法去帮助父类完成构造.

代码改成这样就可以了:

因为Dog继承了Animal,那么编译器执行的时候,就要通过子类的构造方法去构造父类.所以上面报错的原因就在于:无参构造会提供一个super(); 但是父类中没有无参构造,故我们就不能通过子类去帮助父类构造父类,所以就会显示红线(错误).
第二个点: 重复
在子类中如果出现了跟父类中一样的成员变量/成员方法
大家可以想一下下面这个代码的运行结果:
class Animal {
public String name = "Lihua";
public int age;
}
class Dog extends Animal {
public String name = "zhangsan";
public void fun () {
System.out.println("姓名 :" + name);
}
}
public class Test1 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.fun();
}
}
运行结果:

在继承关系下 : 如果成员变量重名 或者 成员方法重名 那么就会调用子类本身自己的成员变量跟方法.
那如果我们就是想要调用 父类的成员变量 或者 成员方法呢
到这里我们就又要引出一个关键字super
还是上面的代码 我们加上super:
class Animal {
public String name = "Lihua";
public int age;
}
class Dog extends Animal {
public String name = "zhangsan";
public void fun () {
System.out.println("姓名 :" + super.name);
}
}
public class Test1 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.fun();
}
}
运行结果:

要强调的一点 : 被private修饰的成员变量 或 成员方法 是不能在子类中使用的.

第三个点: 方法的重载
先抛要求 :
1.方法的名称必须相同
2.方法的参数列表必须不同
3.返回值没有要求
class A {
public String name;
//让两个变量进行 减法运算
public int reduce (int a, int b) {
return a - b;
}
}
class B extends A{
public float reduce(float a, float b) {
return a - b;
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
int ret1 = b.reduce(10,9);
float ret2 = b.reduce(19.5f,19.4f);
System.out.println(ret1);
System.out.println(ret2);
}
}
在子类中的reduce方法与父类中的reduce命名相同,但是他们的参数列表不同,所以他们构成方法的重载,在调用这个方法的时候,通过你的输入的值来判断调用那个方法.(如果两个值都是int类型那么就会调用父类的reduce方法,如果两个数都是float类型 则调用子类的reduce方法).
第四点 : 密封类 :
在class前加上final关键字 表示这个类就是个密封类 那么他就不能被继承.
直接看代码 :

final : final 修饰类表明该类不想被继承,fianl修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容可以 修改的.
解释一下后半句 :

通过下面这幅图 : array中存储的是 第一次new出来的地址(0x567) . 并且它是被final修饰的 所以它就不可以再改变array里面存储的地址(0x567)了. 但是呢,可以改变array里面的数组的值.

如果是成员变量定义为final 语法规定必须同时给定一个初始值 !

否则会报错 :

最后一点 :
final 修饰的方法 可以被重载 但是不能被重写!!!!!
重载:

重写 :

那么继承就到这里了,希望可以帮助到大家~~~~~~

被折叠的 条评论
为什么被折叠?



