1.继承的特点:
①子类可以继承父类的属性和行为,但是子类不能继承父类的构造器;
//子类有自己的构造器,父类构造器用于初始化父类的对象
②java是单继承模式,一个类只能继承一个直接父亲;
③java不支持多继承、但是支持多层继承;
④java所有的的类都是Object的子类;
//Java中的所有类,要么直接继承Object,要么默认继承Object,要么间接继承Object,Object是祖宗类。
那么子类是否可以继承父类的私有成员呢,我认为是可以的,但是不能直接访问。
子类是否可以继承父类的静态成员?
有争议的知识点,子类可以直接使用父类的静态成员(共享并非继承)
比如:
package prac2;
public class ExtendsDemo {
public static void main(String[] args) {
Student str = new Student();
Student.inAdder();
System.out.println(Student.onlineNumber);
}
}
class People{
private int age;
public void run(){
System.out.println("人都会跑!");
}
public static int onlineNumber = 12;
public static void inAdder(){
System.out.println("学习java");
}
}
class Student extends People{
}
2.访问特点:
①在子类中访问成员(成员变量、成员方法)满足就近:就近原则
如果子父类中,出现了重名的成员,会优先使用子类的,那么该怎么办?
可以通过super关键字,指定访问父类的成员。(格式为:super.父类成员变量/父类成员方法)
它先在子类局部范围找,然后在子类成员范围找,然后在父类成员范围找,如果还没找到就报错
具体如下:
public class ExtendsDemo2 {
public static void main(String[] args) {
Wolf s = new Wolf();
System.out.println(s.name);
s.showName();
}
}
class Animal{
public String name = "父类的动物";
}
class Wolf extends Animal{
public String name = "子类的动物";
public void showName(){
String name = "局部变量";
System.out.println(name);//局部的
System.out.println(this.name);//子类的
System.out.println(super.name);//父类的
}
}
E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=65027:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 prac2.ExtendsDemo2
子类的动物
局部变量
子类的动物
父类的动物
Process finished with exit code 0
public class ExtendsDemo2 {
public static void main(String[] args) {
Stu a = new Stu();
a.run();
a.go();
}
}
class Peo{
public void run(){
System.out.println("人可以跑");
}
}
class Stu extends People{
public void run(){
System.out.println("学生可以跑很快");
}
public void go(){
run();
super.run();
}
}
E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=65361:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 prac2.ExtendsDemo2
学生可以跑很快
学生可以跑很快
人都会跑!
Process finished with exit code 0
②
3.方法重写:
定义:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类的这个方法是重写的方法
应用场景:当子类需要父类的方法,但父类的给功能不能完全满足自己的需求时;
子类可以重写父类中的方法
列如:
//父类
public class Phone {
public void call(){
System.out.println("打电话开始");
}
public void message(){
System.out.println("发送短信开始");
}
}
//子类
public class NewPhone extends Phone{
@Override
public void call() {
super.call();
System.out.println("开始视频通话");
}
@Override
public void message() {
super.message();
System.out.println("支持发送图片和视频");
}
}
//测试代码
public class Text {
public static void main(String[] args) {
NewPhone huawei = new NewPhone();
huawei.call();
huawei.message();
}
}
输出:
E:\develop\Java\jdk-17\bin\java.exe "-javaagent:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\lib\idea_rt.jar=64845:E:\idea\IntelliJ IDEA Community Edition 2023.3.4\bin" -Dfile.encoding=UTF-8 -classpath E:\code\stduy1\out\production\stduy1 methodoverride.Text
打电话开始
开始视频通话
发送短信开始
支持发送图片和视频
Process finished with exit code 0
@Override是放在重写后的方法上的,作为重写是否正确的校验注解
建议重写方法都加上Override注解
4.方法重写的注意事项和要求
①重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致
②私有方法不能重写
③子类重写父类的方法时,访问权限必须大于或等于父类
④子类不能重写父类的静态方法,如果重写会报错
标签:子类,void,特点,访问,println,父类,重写,public,out From: https://blog.csdn.net/2301_81147503/article/details/137126877