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

Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录

一,继承

1.什么是继承

2.怎么去继承:

3.注意:

4.继承怎么学   

 二,继承基本使用

三,成员变量和成员方法访问特点

1.成员变量访问特点

1,子类和父类中的成员变量不重名:

总结:

2,子类和父类中的成员变量重名

总结:

三,成员方法访问特点

1,子类和父类中的成员变量不重名:

2,子类和父类中的成员变量重名

总结


一,继承

1.什么是继承

父类怎么形成的:

我们的定义了多个类,发现这些类中有很多重复性的代码,我们就定义了一个父类,将相同的代码抽取出来放到父类中,其他的类直接继承这个父类,就可以直接使用父类中的内容了

2.怎么去继承:

extends

格式:
   子类 extends 父类

3.注意:

a.子类可以继承父类中私有和非私有成员,但是不能使用父类中私有成员

private私有的成员还是不能使用,但可以继承
 b.构造方法不能继承

方法和类是绑定在一起的

4.继承怎么学
   

a.继承不要从是否"拥有"方面来学习
      要从是否能"使用"方面来学习

只要关注能否使用,只要继承,就能使用非私有成员,目的就是为了减少代码重复,优化代码,是一种重要的面向对象设计思想(不用绕圈想了)

 二,继承基本使用

我们需要三个类来演示
1.定义一个父类,在其中定义重复性的代码
2.定义一个子类继承父类 -> extends
  子类 extends 父类
3.创建子类对象,直接使用父类中非私有成员  

 以Employee-->Manager-->Teacher为例,Employee为父类

public class Employee {String name;int age;public void work(){System.out.println("工作");}private void eat(){System.out.println("吃饭");}
}
public class Manager extends Employee{}
public class Teacher extends Employee{}

创建测试类,new子类,使用父类成员,我们发现只能使用父类非私有成员

public class test {public static void main(String[] args) {Teacher teacher = new Teacher();teacher.name = "张三";teacher.age = 23;System.out.println(teacher.name+".............."+teacher.age);teacher.work();//teacher.eat();子类继承父类之后不能使用父类私有成员,只能使用父类非私有成员System.out.println("===================");Manager manager = new Manager();manager.name = "李四";manager.age = 34;System.out.println(manager.name+".............."+manager.age);manager.work();//manager.eat();子类继承父类之后不能使用父类私有成员,只能使用父类非私有成员}
}

三,成员变量和成员方法访问特点

1.成员变量访问特点

1,子类和父类中的成员变量不重名:

创建三个类,Fu类,Zi类,test类

public class Fu {int numFu = 100;
}
public class Zi extends Fu{int numZi = 10;
}
public class test {public static void main(String[] args) {//创建父类对象Fu fu = new Fu();System.out.println(fu.numFu);//父类中的numFu//System.out.println(fu.numZi);//不能直接调用子类特有成员System.out.println("======================");//创建子类对象Zi zi = new Zi();System.out.println(zi.numZi);//子类中的numZiSystem.out.println(zi.numFu);//继承了父类,可以使用父类非私有成员}}

运行结果如下

总结:

看等号左边是谁,先调用谁中的成员  
如果等号左边是父类类型,只能调用父类中的成员变量。

如果等号左边是子类类型,既能调用子类的,还能调用父类中继承过来的非私有成员。
 

2,子类和父类中的成员变量重名

public class Fu {int numFu = 100;int num = 10000;
}
public class Zi extends Fu{int numZi = 10;int num = 1000;
}
public class test {public static void main(String[] args) {//创建父类对象Fu fu = new Fu();System.out.println(fu.numFu);//父类中的numFu//System.out.println(fu.numZi);//不能直接调用子类特有成员System.out.println(fu.num);//父类的System.out.println("======================");//创建子类对象Zi zi = new Zi();System.out.println(zi.numZi);//子类中的numZiSystem.out.println(zi.numFu);//继承了父类,可以使用父类非私有成员System.out.println(zi.num);//子类的}}

如果把子类里面的num=1000注释掉,输出的zi.num会是什么值呢

会发现zi.num会直接继承Fu类里面的num=10000

那如果左边右边不一样呢

输出的结果会是Zi类里面的1000吗

不是,依然是父类里面的10000,所以只有看左边才能确定调用的是谁中的成员

总结:

继承前提下,成员变量访问特点口诀:
看等号左边是谁,先调用谁中的成员,子类没有,找父类

三,成员方法访问特点

1,子类和父类中的成员变量不重名:

依然创建三个类

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu");}
}
public class Zi extends Fu{public void methodZi(){System.out.println("我是父类中的methodZi");}
}

测试类

public class test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();//fu.methodZi();  不能调用子类特有方法System.out.println("==================");Zi zi = new Zi();zi.methodZi();zi.methodFu();//继承父类,可以调用父类中非私有方法}
}

运行

2,子类和父类中的成员变量重名

给Fu类和Zi类各加一个method方法

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu");}public void method(){System.out.println("我是父类中的method方法");}
}
public class Zi extends Fu{public void methodZi(){System.out.println("我是子类中的methodZi");}public void method(){System.out.println("我是子类中的method方法");}
}

测试类

public class test {public static void main(String[] args) {Fu fu = new Fu();fu.methodFu();//fu.methodZi();  不能调用子类特有方法fu.method();//父类中的method方法System.out.println("==================");Zi zi = new Zi();zi.methodZi();zi.methodFu();//继承父类zi.method();//子类中的method方法}
}

同样,如果子类里面没有method方法,就会继承父类里面的方法

总结

成员方法:看new的是谁,先调用谁中的方法,子类没有,找父类

继承中,成员变量访问特点:看等号左边是谁,先调用谁中的成员变量
​继承中,成员方法访问特点:看new的是谁,先调用谁中的方法


http://www.mrgr.cn/news/78242.html

相关文章:

  • HTTP请求失败调试过程 -20241126
  • 前端开发工程师需要学什么?
  • WordCloud参数的用法:
  • 网络安全系列 之 密钥安全管理
  • CTO 实际上是做什么的?
  • Vue Form表单的使用,rules格式校验网络校验,键盘按键监听
  • 2024年最新版Java八股文复习
  • 【大模型】LLaMA-Factory的环境配置、微调模型与测试
  • react 前端最后阶段静态服务器启动命令
  • 目标检测,图像分割,超分辨率重建
  • 多目标优化算法——多目标粒子群优化算法(MOPSO)
  • vue3+ts 我写了一个跟swagger.yml生成请求和响应实体(接口)
  • 2024的ISCTF的复现
  • AQS底层原理
  • 设计模式:11、迭代器模式(游标)
  • redmi 12c 刷机
  • libaom 源码分析:码率控制超分辨率逻辑
  • ffmpeg 预设的值 加速
  • 1- 9 C 语言面向对象
  • Spring Boot 3 集成 Spring Security(2)授权
  • upload-labs 靶场(1~5)
  • 学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)
  • WordCloud参数的用法:
  • DeSTSeg: Segmentation Guided Denoising Student-Teacher for Anomaly Detection
  • 【笔记】轻型民用无人驾驶航空器安全操控
  • 零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu