Java学习-面向对象-继承

  1. 继承是什么?

示例:

packagejava_jicheng_demo1;

publicclassA{

//创建公开的成员变量,方法

publicStringnane;

publicintage;

publicvoidprint1(){

System.out.println("666");

}

//创建私有的成员变量,方法

privateStringInfo;

privatevoidprint2(){

System.out.println("111");

}

}

packagejava_jicheng_demo1;

publicclassBextendsA{

//创建A的子类

}

packagejava_jicheng_demo1;

publicclassText{

publicstaticvoidmain(String[]args){

//子类可以继承父类的非私有成员

Bb=newB();

System.out.println(b.age);

System.out.println(b.nane);

//System.out.println(b.Info);会报错

b.print1();

//b.print2();会报错

}

}

  1. 执行原理

  1. 使用继承的好处

使用继承:

4.继承的注意事项

  1. 权限修饰符

权限修饰符是什么?有啥用?

packagejava_jicheng_demo3;

publicclassF{

//创建四种权限修饰符不同的方法

publicvoidpubMe(){

System.out.println("public");

}

protectedvoidproMe(){

System.out.println("protected");

}

voidMe(){

System.out.println("缺省");

}

privatevoidpriMe(){

System.out.println("private");

}

publicvoidtest(){

pubMe();

proMe();

Me();

priMe();//同一个类下均可访问

}

}

packagejava_jicheng_demo3;

publicclassText{

publicstaticvoidmain(String[]args){

Ff=newF();

f.Me();

f.proMe();

f.pubMe();

//f.priMe();同一包下的不同类会报错

}

}

packagejava_jicheng_demo2;

importjava_jicheng_demo3.F;

publicclassF1extendsF{

F1f1=newF1();

publicvoidtest(){

f1.proMe();//不会报错

//f1.priMe();只能在F类中使用

}

}

packagejava_jicheng_demo3;

publicclassText{

publicstaticvoidmain(String[]args){

Ff=newF();

f.Me();

f.proMe();

f.pubMe();

//f.priMe();会报错

}

}

  1. 单继承,Object类

所有的类都直接或间接地继承了Object类

  1. 方法重写

例子:希望返回一个具体的对象,而不是一个地址

packagejava_jicheng_demo4;

publicclassStudent{

privateStringname;

privateintage;

publicStudent(){

}

publicStudent(Stringname,intage){

this.name=name;

this.age=age;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringtoString(){

return"Student["+name+","+age+"]";

}

}

packagejava_jicheng_demo4;

publicclassTest{

publicstaticvoidmain(String[]args){

Students1=newStudent("张三",19);

System.out.println(s1);

System.out.println(s1.toString());//两行代码是一样的

//想要输出具体的对象而不是地址可以对toString()方法重写

System.out.println(s1.toString());//两行代码是一样的

}

}

注意事项:

  1. 子类访问其他成员特点

子类中访问父类,要使用super.成员变量/方法

  1. 子类构造器的特点

代码:

packagejava_jicheng_demo5;

publicclassF{

publicF(){

System.out.println("F类的无参构造器执行了~~");

}

publicF(Stringname,intage){

System.out.println("F类的you参构造器执行了~~");

}

}

packagejava_jicheng_demo5;

publicclassZextendsF{

publicZ(){

System.out.println("子类的无参构造器执行了~~~");

}

publicZ(Stringname,intage){

System.out.println("子类的有参构造器执行了~~");

}

}

packagejava_jicheng_demo5;

publicclasstest{

publicstaticvoidmain(String[]args){

Zz1=newZ();

Zz2=newZ("123",14);

}

}

运行结果:

其实每次子类的构造器前都会有一个super()默认没有显示罢了

如果父类没有无参构造器,则需要自己在子类构造器之前手写super()调用父类构造器

子类构造器调用父类构造器的场景:

关于兄弟构造器:

例子:

代码:

privateintage;

privateStringschoolName;

publicStudent(){

}

publicStudent(Stringname,intage){

this(name,age,"黑马程序员");

}

publicStudent(Stringname,intage,StringschoolName){

this.name=name;

this.age=age;

this.schoolName=schoolName;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringgetSchoolName(){

returnschoolName;

}

publicvoidsetSchoolName(StringschoolName){

this.schoolName=schoolName;

}

}

packagejava_jicheng_demo6;

publicclasstext{

publicstaticvoidmain(String[]args){

Students1=newStudent("小李",19,"家里蹲大学");

Students2=newStudent("小黑",10);

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/449221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot 自定义参数配置化,密钥,密码,文件保存路径

application.properties 和 application.yml 都是一样的配置方法,只是格式不一样 定义配置文件 server.port8080 image.save.pathE:\ #自定义文件保存路径读取配置文件 Value("${image.save.path}")private String filePath;//E:\优化配置文件 如果我参…

【服务器搭建】快速完成幻兽帕鲁服务器的搭建及部署【零基础上手】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 教程详戳:不需要懂技术,1分钟幻兽帕鲁服…

深度学习入门笔记(二)神经元的结构

神经网络的基本单元是神经元,本节我们介绍神经元的结构。 2.1 神经元 一个神经元是由下面 5 部分组成的: 输入:x1,x2,…,xk。权重:w1,w2,…,wk。权重的个数与神经元输入的个数相同。偏移项:可省略。激活函数&#…

SpringBoot数据访问复习

SpringBoot数据访问复习 数据访问准备 引入jdbc所需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency> 原理分析 导入的启动器引入了两个…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月3日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月3日 星期六 农历腊月廿四 南小年 1、 气象局&#xff1a;将雨雪冰冻三级应急响应提升为二级&#xff0c;针对性做好春运气象保障服务。 2、 教育部&#xff1a;鼓励银龄教师投身西部地区、民族地区民办学校。 3、 四部…

Three.js学习2:页面引入 Three.js

一、关于 Three.js 的版本 随着页面3D化应用越来越多&#xff0c;近两年 Three.js 处于飞速发展之中。现在 Three.js 几乎每个月都会发布一个新的版本&#xff0c;会增加新的 API&#xff0c;废掉一些旧的功能之类的。 可以从 Three.js 官网 Three.js – JavaScript 3D Libra…

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff0c;后续的DML的写语句&#xff0c;DDL语 句&#xff0c;已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份&#xff0c;对所有的表进行锁定&#xff…

HTML用户充值页面充值中心模板

HTML用户充值页面充值中心模板,HTMLCSSJS&#xff0c;记事本修改index.html里面的内容即可&#xff0c;本地双击可以运行&#xff0c;也可以上传到服务器 蓝奏云&#xff1a;https://wfr.lanzout.com/izdQ41n4hqbi

C++学习Day01之using声明以及using编译指令

目录 一、程序1.1 using声明1.2 using声明与就近原则1.3 using编译指令与就近原则1.4 多个using编译指令 二、分析与总结 一、程序 1.1 using声明 #include<iostream> using namespace std;namespace KingGlory {int sunwukongId 1; } void test01() {//1、using声明u…

基于SpringBoot Vue单位考勤管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

机器学习 | 如何构建自己的决策树算法?

决策树思想的来源非常朴素&#xff0c;程序设计中的条件分支结构就是if-else结构&#xff0c;最早的决策树就是利用这类结构分割数据的一种分类学习方法 目录 初识决策树 决策树原理 cart剪枝 特征提取 泰坦尼克号乘客生存预测(实操) 回归决策树 初识决策树 决策树是一种…

2024年【A特种设备相关管理(电梯)】考试总结及A特种设备相关管理(电梯)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;电梯&#xff09;考试总结是安全生产模拟考试一点通生成的&#xff0c;A特种设备相关管理&#xff08;电梯&#xff09;证模拟考试题库是根据A特种设备相关管理&#xff08;电梯&#x…