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

java基础——面向对象04(继承)

一.继承

        1.什么叫继承?

继承允许一个类(子)基于另一个已存在的类创建新类。子类会自动继承父类中的非私有成员,因此无需编写相同的代码。

        2.继承的写法

public class son entends father

        3.注意

* A.子类可以直接使用父类的功能(非私有)
* B.子类可以重写(override)父类的方法
* C.子类对象由子类和父类多张设计图共同设计而成。
* D.每个类只能继承一个类(只能有一个父亲),不支持多继承,但是可以继承

        4.特点

*1.单继承,多层继承*2.所有java类的祖宗类都是object,也就是object是祖宗*3.就近原则:优先访问自己的类,没有再去访问父类子类局部——>子类成员变量——>父类成员变量

二.方法重写

        1.定义

当子类认为父类的某些方法不好时,子类可以重新写一个方法名称相同参数列表一样的方法来覆盖继承过来的父类的方法

        2.注意

* 1.重写时,子类的返回值类型应该与父类相同或者比父类更大方法名称,参数个数、顺序、类型等应完全相同。
* 2.子类的方法可以比父类更加宽松。
* 3.static静态方法、final修饰的、私有的方法都可以重写。
* 4.建议:在子类重新写父类之前,加上@override注释。

        3.应用

   一般是用来重写 “toString”这个方法。我们常常打印 实例s1,即...print(s1),实际是打印的是 s1.toString(),最终会得到s1的地址,但是我们实际想得到的是s1的信息,所以我们常常在子类中重写祖宗类的toString

三.子类构造器

        1.子类构造器的特点

*A. 子类的全部构造器会调用父类的构造器,再去调用自己的
*B. 当父类中存在无参构造器,那么子类中就算你不写,也会有在子类构造器中的个地方默认有 super()
*C. 当父类中的有参构造器覆盖了父类默认的无参,你又没写父类的无参;或者私密无法访问;或不可访问,这个时候,你就必须在子类的构造器开头手写 super(父类有参需要的参数)*子类中不是必须要明确有或者一定有super,但是每个子类构造器需要调用一次父类的构造器,可以直接,可以间接

        2.super和this

super(...)是调用父类构造器
this(...)是调用本类中其他构造器   //有时候几个构造器的内部传参都十分相似,那么我们可以在参数少的构造器中直接this             (传参),这个传的参是能够包容小的构造器的大构造器的参数,具体见实例。

        3.注意

* super()必须直接或者间接存在;this根据需要写即可;* super和this如果存在,一定要写在构造器中的最前面(注意构造器是没有返回值的,今天写代码就写成void类型了!不要犯低级错误)

* super和this不可同时存在,因此某一构造器写了this,就没有super,但是this会将其带入最终要传入的构造器中,那个构造器肯定是有super的,因此这就叫间接访问父类的构造器。

四.修饰符权限

private:私有,只能在本类中随意调用,在测试类中可用该类提供的set和get方法赋值
没写:可以在本类、同一个包中的类之间进行调用
protected:可以在本类、同一个包的类、子孙类之间调用
public:任何位置范围:  public > protected > 没写 > private

五.代码实例

//儿子类
package father_son;
import javax.xml.validation.SchemaFactoryConfigurationError;public class student extends people{public  student(String name,String school){this(name,98,school);System.out.println("这个是第一个子类的构造器");
//因为this的存在。所以先会执行下面的构造器,然后再回到zhis后面这个语句继续执行}public  student(String name,int score,String school){super(name);this.score=score;this.school=school;System.out.println("这个是第二个子类构造器");}public int score;//子类的成员变量public  String school;@Override//方法重写public void skill(){//未加修饰的父类方法重写,因此这里可以 不写,protected,public修饰System.out.println("每个人都有自己擅长的东西");System.out.println("重写people方法");}public void info(){//子类方法,super调用父类变量及方法System.out.println(super.name+"的成绩是"+this.score+",他就读的学校是"+this.school);super.setAge(13);super.setSex('男');System.out.println("他的性别是:"+super.getSex()+"; 年龄是:"+super.getAge()+"岁。");}
}
package father_son;
//父类
public class people extends Object {//如果不写,默认继承Object祖宗类//这里父类没有重写无参构造器,因此父类只有有参构造器public people(String name){//记住了,构造器没有返回值类型this.name=name;System.out.println("调用了父类的构造器");}public String name;//公有成员变量private int age;//私有成员变量private char sex;//私有成员变量public void Study(){System.out.println("人可以学习知识");}void skill(){//未加修饰System.out.println("每个人都有自己擅长的东西");}public void setAge(int age) {this.age = age;}public void setSex(char sex) {this.sex = sex;}public char getSex() {return sex;}public int getAge() {return age;}
}
//测试类
import father_son.student;public class Main {public static void main(String[] args) {student s1=new student("张明","第一初级中学");s1.info();//调用自己的方法s1.skill();//调用子类重写的方法s1.Study();//调用父类方法}
}

http://www.lryc.cn/news/592799.html

相关文章:

  • 通俗易懂:什么是决策树?
  • STM32-第七节-TIM定时器-3(输入捕获)
  • STL—— list迭代器封装的底层讲解
  • 小白学Python,网络爬虫篇(2)——selenium库
  • 2025年Flutter开发主流技术栈
  • Windows发现可疑的svchost程序
  • 怎么自己搭建云手机
  • Hive 向量化执行引擎 Vectorized Execution 常见 NPE 报错分析及解决
  • 域名WHOIS信息查询免费API使用指南
  • HIVE实战处理(二十四)留存用户数
  • 专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载
  • 线程控制:互斥与同步
  • math.h函数
  • 深度学习零基础入门(3)-图像与神经网络
  • 需求变更频繁?构建动态估算机制四大要点
  • 短视频矩阵系统:选择与开发的全面指南
  • nastools继任者?极空间部署影视自动化订阅系统『MediaMaster』
  • 代理模式及优化
  • 解锁时序数据库选型密码,为何国产开源时序数据库IoTDB脱颖而出?
  • 脉冲神经网络(Spiking Neural Network, SNN)与知识蒸馏(Knowledge Distillation, KD)
  • Vue3 Anime.js超级炫酷的网页动画库详解
  • Kubernetes (k8s)、Rancher 和 Podman 的异同点分析
  • Jmeter系列(6)-测试计划
  • 网关-微服务网关实现
  • Postman/Apipost中使用Post URL编码发送含换行符参数的问题分析
  • vue2 面试题及详细答案150道(101 - 120)
  • 智慧后厨检测算法构建智能厨房防护网
  • Redis学习其三(订阅发布,主从复制,哨兵模式)
  • 【大模型:知识图谱】--6.Neo4j DeskTop安装+使用
  • RS485转PROFIBUS DP网关写入命令让JRT激光测距传感器开启慢速模式连续测量