当前位置: 首页 > news >正文

Javase 基础入门 —— 04 继承

本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员Java+AI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。

01 什么是继承?

Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。

注:① 子类只能继承父类的非私有成员

② 子类的对象是由子类、父类共同完成的

People.java人类

package company;//父类
public class People {private String name;private char gender;public String getName() {return name;}public void setName(String name) {this.name = name;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}
}

Teacher.java教师类

package company;//子类
public class Teacher extends People{private String skill;public String getSkill() {return skill;}public void setSkill(String skill) {this.skill = skill;}
}

Test.java测试

package company;public class Test {public static void main(String[] args) {Teacher t = new Teacher();t.setName("Celeste");t.setGender('女');t.setSkill("C++、Java、Python");System.out.println(t.getName());System.out.println(t.getGender());System.out.println(t.getSkill());}
}

02 权限修饰符

权限修饰符是用来限制类中成员(成员变量、成员方法、构造器)能够被访问的范围。

在这里插入图片描述

package family;public class Father {//1.private 本类中访问private void privateMethod(){System.out.println("privateMethod");}//2.缺省 本类中、同一个包下其他类中访问void Method(){System.out.println("Method");}//3.protected 本类中、同一个包下其他类中、子类中访问protected void protectedMethod(){System.out.println("protectedMethod");}//4.public 任意类中访问public void publicMethod(){System.out.println("publicMethod");}public static void main(String[] args) {Father f = new Father();f.privateMethod();f.Method();f.protectedMethod();f.publicMethod();}
}

03 继承的特点

在这里插入图片描述

为什么不支持多继承?

在这里插入图片描述

为什么Object是祖宗类?

在这里插入图片描述

package family;public class Test {public static void main(String[] args) {Zi z = new Zi();z.show();}
}class Fu{String name = "Fu的name";public void run(){System.out.println("Fu的run方法");}
}class Zi extends Fu{String name = "Zi的name";public void show(){String name = "show的name";System.out.println(name); //show的nameSystem.out.println(this.name); //Zi的nameSystem.out.println(super.name); //Fu的namerun(); //Zi的run方法super.run(); //Fu的run方法}public void run(){System.out.println("Zi的run方法");}
}

在这里插入图片描述

04 方法重写

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。

“声明不变,重写实现”

package family;public class Test2 {public static void main(String[] args) {cat c = new cat();c.cry();}
}class animal{public void cry(){System.out.println("动物会叫~");}
}class cat extends animal{@Override //更安全,更优雅public void cry(){System.out.println("喵喵喵~");}
}

@Override为方法重写的校验注释,其要求方法名称和形参列表必须与被重写方法一致,否则报错!更安全、更可读、更优雅!

在这里插入图片描述

注:① 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public>protec ted> 缺省)
② 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小
③ 私有方法、静态方法不能被重写,如果重写会报错的

package family;public class Test3 {public static void main(String[] args) {Student s = new Student("张三", '男', 40);System.out.println(s.toString()); //family.Student@3ac3fd8bSystem.out.println(s); //Student{name张三gender=男age=40}}
}class Student{private String name;private char gender;private int age;@Overridepublic String toString(){return "Student{name" + name + "gender=" + gender + "age=" + age + "}";}public Student() {}public Student(String name, char gender, int age) {this.name = name;this.gender = gender;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

05 子类构造器的特点

子类的全部构造器,都会先调用父类的构造器,再调用自己的构造器。

在这里插入图片描述

注:super();为寻找父亲构造器,默认写在子类构造器第一行。

06 this() 调用兄弟构造器

//this调用兄弟构造器
public Student(String name, char sex, int age){this(name, sex, age, "黑马程序员");
}public Student(String name, char sex, int age, String school){this.name = name;this.sex = sex;this.age = age;this.school = school;
}

注:super(...)this(...)必须写在构造器的第一行,且二者不能同时出现。

相关文章:

  • 大模型应用相关问题记录
  • 嵌入式系统调用底层基本原理分析
  • 【EasyPan】removeFile2RecycleBatch方法及递归操作解析
  • 香港服务器租用需要哪些性能要求
  • 基于STM32_HAL库的HC-08蓝牙插座项目
  • 1.2、AI及LLM基础:OpenAI 开发
  • 知识储备-后仿
  • 木马派RV1106G3开发板驱动AIC8800DC USB WiFi模块
  • 若依框架深度解析:企业级快速开发平台的设计哲学与实践
  • SwiftUI 1.Text介绍和使用
  • 基于缺失数据的2024年山东省专项债发行报告
  • Linux进程状态及转换关系
  • 电池大脑的基准测试及AI拓展
  • React性能优化
  • Linux避免文件误删详解(Linux Avoids File Deletion Errors with Detailed Explanation)
  • 前缀和相似题共赏
  • 天梯-这是字符串题
  • Unity 接入阿里的全模态大模型Qwen2.5-Omni
  • VS中回显109:对‘pthread_create’未定义的引用
  • 服务器如何修复SSL证书错误?
  • 苗旋已任民航局空管局局长、党委副书记
  • 网培机构围猎中老年人:低价引流卖高价课、“名师”无资质,舆论呼吁加强监管
  • 艺术家会怎么造机器人?
  • 洛阳白马寺存争议的狄仁杰墓挂牌,当地文物部门:已确认
  • 特朗普“炮轰”美联储带崩美股!道指跌超900点,黄金再创新高
  • 人民日报刊文:美国滥施关税及中国反制措施的法理视角透析