Java
继承(Inheritance
)教学
什么是继承?
继承(Inheritance) 是 Java 面向对象编程(OOP)中的一个重要特性。子类(Subclass) 可以继承 父类(Superclass) 的属性和方法,从而实现代码复用,减少重复代码,提高可维护性。
🔹 继承的特点:
✅ 子类 继承 父类 的所有非私有(private) 的属性和方法。
✅ 子类可以 新增方法和属性,也可以重写父类方法(方法覆盖,Override)。
✅ Java 只支持单继承,但可以通过接口(Interface) 实现多继承的效果。
✅ super
关键字可以调用 父类的构造方法或方法。

继承的基本语法
1 2 3 4 5 6 7 8 9
| class 父类 { }
class 子类 extends 父类 { }
|
继承的基本示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Animal { String name;
public void eat() { System.out.println(name + " 在吃东西!"); } }
class Dog extends Animal { public void bark() { System.out.println(name + " 在汪汪叫!"); } }
public class InheritanceDemo { public static void main(String[] args) { Dog dog = new Dog(); dog.name = "旺财"; dog.eat(); dog.bark(); } }
|
🔹 运行结果
super 关键字
super
关键字用于访问父类的构造方法或成员(变量 & 方法)。
4.1 使用 super
调用父类方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Animal { public void makeSound() { System.out.println("动物发出声音!"); } }
class Dog extends Animal { public void makeSound() { super.makeSound(); System.out.println("狗在汪汪叫!"); } }
public class SuperDemo { public static void main(String[] args) { Dog dog = new Dog(); dog.makeSound(); } }
|
🔹 运行结果
4.2 使用 super
调用父类构造方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Animal { String name;
public Animal(String name) { this.name = name; System.out.println("Animal 构造方法被调用"); } }
class Dog extends Animal { public Dog(String name) { super(name); System.out.println("Dog 构造方法被调用"); } }
public class SuperConstructorDemo { public static void main(String[] args) { Dog dog = new Dog("旺财"); } }
|
🔹 运行结果
1 2
| Animal 构造方法被调用 Dog 构造方法被调用
|
方法重写(Method Overriding
)
子类可以修改从父类继承的方法,这称为方法重写(Override
)。
📌 方法重写规则:
- 方法名相同、参数列表相同、返回类型相同或是其子类。
- 访问权限不能比父类更严格(如:父类是
public
,子类不能是 private
)。
- 只能重写非
private
和 static
的方法。
@Override
注解用于检查是否正确重写方法,建议加上。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Animal { public void makeSound() { System.out.println("动物在发出声音!"); } }
class Dog extends Animal { @Override public void makeSound() { System.out.println("狗在汪汪叫!"); } }
public class OverrideDemo { public static void main(String[] args) { Dog dog = new Dog(); dog.makeSound(); } }
|
运行结果
方法重载(Method Overload
)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
- 被重载的方法必须改变参数列表(参数个数或类型不一样);
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
- 无法以返回值类型作为重载函数的区分标准。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class Overloading { public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Overloading o = new Overloading(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } }
|
重写与重载之间的区别
区别点 |
重载方法 |
重写方法 |
参数列表 |
必须修改 |
一定不能修改 |
返回类型 |
可以修改 |
一定不能修改 |
异常 |
可以修改 |
可以减少或删除,一定不能抛出新的或者更广的异常。 |
访问 |
可以修改 |
一定不能做更严格的限制(可以降低限制) |
总结
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
- (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
- (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
- (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。


final
关键字
在继承中,final
关键字有以下作用:
final
类:不能被继承(如 String
类)
final
方法:不能被子类重写,但可以被继承使用
final
变量:定义常量,值不能被修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Animal { public final void sleep() { System.out.println("动物在睡觉!"); } }
class Dog extends Animal { }
public class FinalMethodDemo { public static void main(String[] args) { Dog dog = new Dog(); dog.sleep(); } }
|
继承与构造方法
7.1 子类构造方法默认调用父类无参构造
如果父类没有无参构造方法,子类必须手动调用 super()
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Animal { public Animal(String name) { System.out.println("Animal 构造方法:" + name); } }
class Dog extends Animal { public Dog(String name) { super(name); System.out.println("Dog 构造方法:" + name); } }
public class ConstructorDemo { public static void main(String[] args) { Dog dog = new Dog("旺财"); } }
|
🔹 运行结果
1 2
| Animal 构造方法:旺财 Dog 构造方法:旺财
|
Object 类:所有类的父类
在 Java 中,所有类默认继承 Object
类,它提供了:
toString()
:返回对象的字符串表示。(所以可以重写该方法)
equals(Object obj)
:比较两个对象是否相等。
hashCode()
:返回对象的哈希值。
getClass()
:返回对象的运行时类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Animal { String name; @Override public String toString() { return "Animal[name=" + name + "]"; } }
public class ObjectDemo { public static void main(String[] args) { Animal animal = new Animal(); animal.name = "小猫"; System.out.println(animal.toString()); } }
|
🔹 运行结果