这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/115741306
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
java继承
基本概述
- 面向对象三大特征:
- 封装性
- 继承性
- 多态性
- 继承的特点
- 子类可以拥有父类的“内容”
- 子类还可以拥有自己专有的内容
继承的基本演示
演示一
其他类
package com.idayuanshuai.www.Demo12;
public class Employee {
public void method(){
System.out.println("idys speaking");
}
}
package com.idayuanshuai.www.Demo12;
public class Teacher extends Employee {
}
主类
package com.idayuanshuai.www.Demo12;
public class TestDemo1 {
public static void main(String[] args) {
Teacher te = new Teacher();
te.method();
}
}
结果输出:
idys speaking
继承中的成员变量
- 在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式
- 直接通过子类对象访问成员变量
- 等号左边是子类的变量,就优先用子类的变量,没有则向上查找
- 间接通过成员方法访问成员变量
- 该方法属于那个类,就优先使用这个的变量,没有则向上查找
演示
其他类:
package com.idayuanshuai.www.Demo13;
public class FatherClass {
int fNum =10;
int num = 2;
public void method(){
System.out.println(num);
}
}
package com.idayuanshuai.www.Demo13;
public class SonClass extends FatherClass{
int num =20;
int sNum = 100;
}
主类
package com.idayuanshuai.www.Demo13;
public class TestDemo {
public static void main(String[] args) {
SonClass s = new SonClass();
s.method();
new FatherClass().method();
System.out.println(s.num);
System.out.println(s.fNum);
}
}
输出结果
2
2
20
10
重名变量的访问
- 在子类中访问重名变量的方法
- 访问局部变量:直接输出
- 访问自己类的成员变量:this.成员变量名
- 访问父类的成员变量:super.成员变量名
演示
- 其他类
package com.idayuanshuai.www.Demo14;
public class SonClass extends FatherClass {
int num = 20;
public void method(){
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
package com.idayuanshuai.www.Demo14;
public class FatherClass {
int num=2;
}
- 主类
package com.idayuanshuai.www.Demo14;
public class TestDemo1 {
public static void main(String[] args) {
new SonClass().method();
}
}
- 输出
20
20
2
方法覆盖重写
- 重写:方法名一样;参数列表一样
- 重载:方法名一样,参数列表不一样
@Override
:写在方法前面,用来检测是不是有效的正确覆盖重写- 子类方法的返回值必须【小于等于】父类方法的返回值范围
java.lang.Object
类是所有类的公共最高类(祖宗类),java.lang.String
是java.lang.Object
的子类- 子类方法的权限必须【大于等于】父类方法的权限修饰符
public > protected > (default)> private
- 设计原则:对于已经投入使用的类,尽量不要修改,推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容
演示一
- 其他类
package com.idayuanshuai.www.Demo15;
public class Phone {
public void call(){
System.out.println("打电话");
}
public void send(){
System.out.println("发短信");
}
public void show(){
System.out.println("显示手机号码");
}
}
package com.idayuanshuai.www.Demo15;
public class NewPhone extends Phone {
@Override
public void show() {
super.show();
System.out.println("显示头像");
System.out.println("显示姓名");
}
}
- 主类
package com.idayuanshuai.www.Demo15;
public class TestDemo1 {
public static void main(String[] args) {
Phone ph = new Phone();
ph.show();
System.out.println("================");
NewPhone np = new NewPhone();
np.show();
}
}
- 输出结果
显示手机号码
================
显示手机号码
显示头像
显示姓名
继承中的构造方法
- 子类构造方法当中有一个默认隐含的
super()
调用,所以一定是先调用父类构造,然后执行子类构造 - 子类构造可以通过
super
关键字来调用父类重载构造 super
的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super
构造- 子类必须调用父类构造方法,不写则会直接调用
super()
;写了则用写了的super
,super构造方法只有一个
演示
- 其他类
package com.idayuanshuai.www.Demo16;
public class FatherClass {
public FatherClass(int n){
System.out.println("your input is "+n);
}
public FatherClass(){
System.out.println("no input");
}
}
package com.idayuanshuai.www.Demo16;
public class SonClass extends FatherClass {
public SonClass(){
super(20);
System.out.println("son class");
}
}
- 主类
package com.idayuanshuai.www.Demo16;
public class TestDemo1 {
public static void main(String[] args) {
SonClass sonClass = new SonClass();
}
}
- 输出结果
your input is 20
son class
java
语言的继承是单继承,子类只能继承一个父类。
写在最后的话:
- 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
- 欢迎关注我的CSDN博客,IDYS’BLOG
- 持续更新内容:
linux基础 | 数据通信(路由交换,WLAN) | Python全栈 | 云计算 - 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
- 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!