一、引言
继承是面向对象编程中的一项重要特性,也是Java语言中的核心概念之一。
通过继承,我们可以构建出具有层次结构的类,并实现代码的重用和扩展。继承不仅提供了一种组织和管理代码的方式,还能够使程序更加灵活和可扩展。
二、继承
(1)概念
将子类之间的共性进行抽取生成父类, 在继承关系下, 子类能够直接拥有父类可被继承的内容
继承的作用之一就是解决子类之间的代码冗余问题
(2)语法
基本格式
public class 子类类名 extends 父类类名{
}
案例
package com.by.entity;
/**
动物类-父类
*/
public class Animal {
//名字 年龄 性别
public String name;
public int age;
public boolean sex;
//吃饭
public void eat(){
System.out.println("吃饭");
}
//睡觉
public void sleep(){
System.out.println("睡觉");
}
}
//Dog类,继承自Animal类
public class Dog extends Animal{
}
//Cat类,继承自Animal类
public class Cat extends Animal{
}
//测试类
package com.by.test;
import com.by.entity.Cat;
import com.by.entity.Dog;
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
d.name = "小黑";
d.eat();
d.sleep();
Cat c = new Cat();
c.eat();
c.sleep();
}
}
(3)规则
- 继承双方必须满足is a的关系结构
- 一个子类只能有一个直接父类,一个父类可以拥有多个直接子类**(多继承)**
- 一个子类在身为子类的同时也可以是其他类的父类
- 子类可以拥有独有内容
- 子类可以继承拥有所有父类所有可被继承的内容
- 父类无法使用和访问子类的独有内容
- 父类的私有内容子类无法直接使用
- 父类的构造子类
(4)子类内存结构
- 子类内存由父类内容和子类独有独有内容组成
(5)父类封装
package com.by.entity;
/**
动物类-父类
*/
public class Animal {
//名字 年龄 性别
private String name;
private int age;
private boolean sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
//吃饭
public void eat(){
System.out.println("吃饭");
}
//睡觉
public void sleep(){
System.out.println("睡觉");
}
private void method(){
}
}
package com.by.test;
import com.by.entity.Dog;
public class Test {
public static void main(String[] args) {
Dog d = new Dog();
d.setName("小黑");
System.out.println(d.getName());
}
}
三、方法重写
- 子类对从父类继承过来的方法进行方法体的重新书写,简称方法重写, 也称为方法覆盖
规则
- 建立在继承关系之上
- 方法名、参数列表、返回值类型必须与父类保持一致
- 访问修饰符与父类相同或更宽
- 不允许抛出比父类更大或更多的异常
使用
- 子类重写之后,优先执行子类重写内容
- 父类的作用:
- 解决子类之间的冗余问题
- 强制约束子类必须拥有某些内容
四、访问修饰符
本类 | 同包 | 非同包子类 | 非同包非子类 | |
---|---|---|---|---|
private-私有的 | √ | |||
default-默认的 | √ | √ | ||
protected-受保护的 | √ | √ | √ | |
public-公共的,公开的 | √ | √ | √ | √ |
-
只有default和public可以修饰类
-
default无法显式声明
-
以上四个都可以修饰属性、方法、构造
-
以上四个都不能修饰局部变量
五、结语
继承是面向对象编程中的重要概念,它提供了一种代码复用和扩展的机制,使得程序更加灵活和可维护。
在使用继承时,我们需要注意一些问题。首先,继承应该遵循"is-a"关系,即子类应该是父类的一种特殊类型。其次,子类可以覆盖父类的方法,以实现自己的特定行为。此外,Java中的单继承限制了一个类只能继承一个父类,但可以通过接口实现多重继承的效果。
继承还需要注意的是合理设计类层次结构。过度的继承可能导致类之间的耦合性增加,代码的维护难度加大。因此,在使用继承时,我们应该遵循高内聚、低耦合的设计原则,合理划分类的责任和功能。
最后,继承不仅仅是一种代码组织的方式,它还是面向对象思想的体现。通过继承,我们可以构建出更加抽象、灵活和可扩展的程序。合理运用继承,可以提高代码的重用性和可维护性,同时也能够使程序的逻辑更加清晰和易于理解。
继承作为面向对象编程的重要特性之一,在实际开发中有着广泛的应用。通过合理运用继承,我们可以构建出更加优雅、灵活和可扩展的程序。