Java-继承
时间:2021-07-15
本文章向大家介绍Java-继承,主要包括Java-继承使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是继承
现实生活中最常见的 你 和 你爸爸
换到Java中 即 子类 和 父类 子类可以继承父类的属性和方法
注意点
- Java只支持单继承!!!!!!!!
- 父类中的private定义的方法和属性不能继承
- 被final修饰的类不能被继承
- 继承通过extends关键字
示例
定义一个Person
类
package com.oop.demo07;
public class Person {
private String name;
private int age;
public double money;
public static final String date = "2021-07-14";
public Person() {
System.out.println("我是父类构造函数");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sleep(){
System.out.println(this.name + "在睡觉");
}
}
定义一个Student
类 继承自Person
类
package com.oop.demo07;
public class Student extends Person {
public Student() {
System.out.println("我是子类的构造函数");
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.money);
System.out.println(date);
}
}
测试输出
从上图可知
子类实例化的时候 会先调用父类的构造方法 再调用子类的构造方法
子类的money属性 date属性都是继承自Person类
子类不会继承父类的任何构造方法!!!
继承树
有一个继承树 (idea快捷键ctrl + h
)
在Java中 Person没有写extends
关键字 编译器会默认加上extends Object
所以 Java中的任何类 除了Object 都会继承一个类 只是显示写不显示写的情况 而Object
类比较特别 他没有父类
就像你只有一个爹
但是你爹可以有多个儿子
super(有继承是前提 必须有父子关系)
super用来调用父类方法和属性的
super注意点
- super调用父类的构造方法 必须在子类构造方法第一行
- super必须在子类的方法或者构造方法中出现
- super this不能同时调用构造方法
super和this区别
代表的对象不同:
this:当前对象
super:父类对象
前提:
this:没有继承也可以使用
super:必须要在继承的前提下才能使用
构造方法:
this:本类的构造
super:父类构造
示例
package com.oop.demo07;
public class Person {
private String name;
private int age;
public double money;
public static final String date = "2021-07-14";
public Person(String name) {
System.out.println("我是父类构造函数");
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sleep(){
System.out.println(this.name + "在睡觉");
}
}
package com.oop.demo07;
public class Student extends Person {
public Student(String name) {
super(name);
System.out.println("我是子类的构造函数");
}
public static void main(String[] args) {
Student student = new Student("yyll");
System.out.println(student.getName());
}
}
测试输出
方法重写(必须有继承关系)
注意点
- 必须有继承关系 即有父子类
- 父类中被private修饰的方法无法继承(继承不了 更别提重写了) 权限问题 Private只能在当前类使用
- 父类中被final修饰的方法无法重写
- 修饰符范围 可以扩大 但不能缩小 public > protected > default > private
- 参数列表必须相同!! 方法名称必须相同
错误示例
正确示例
package com.oop.demo08;
public class Person{
public void hello(){
System.out.println("父类的hello方法");
}
}
package com.oop.demo08;
public class Student extends Person{
@Override
public void hello() {
super.hello();
System.out.println("子类的hello方法");
}
}
package com.oop;
import com.oop.demo08.Student;
public class Applcation {
public static void main(String[] args) {
Student s = new Student();
s.hello();
}
}
测试输出
小结
- private关键字定义的 字段 和 方法 只能在本类使用
- 被final修饰的类 不能被继承 修饰的方法不能被重写 修饰的变量不能重新赋值
- 所有的类都会 隐式或者显式的继承一个类 根祖宗是Object
- 修饰符范围大小 public > protected > default > private
即使再小的帆也能远航
原文地址:https://www.cnblogs.com/juanbao/p/15011515.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 如何在一个Docker中同时运行多个程序进程?
- 如何在CentOS / RHEL 7上启用IPv6
- Golang中的RegExp正则表达式用法指南
- Golang glog使用详解
- kubernetes使用securityContext和sysctl
- 浅谈分词算法基于字的分词方法(HMM)
- 优雅的重启服务
- Go defer 会有性能损耗,尽量不要用?
- 带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin
- 聊聊Golang逃逸分析
- 结构型设计模式:适配器模式和门面模式
- 结构型设计模式:代理模式
- kubernete中的原子调度单位:pod
- mybatis-generator在命令行及IEAD中的使用
- mybatis-generator在命令行及IDEA中的使用