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

Java基础第4天总结(继承)

  • 继承:通过extends关键字,让两个类建立父子关系  public class B extends A{} A为父类,B为子类
  • 子类能继承父类的非私有成员(成员变量、成员方法)
  • 子类的对象是由子类、父类共同完成的
package com.itheima.extend;
//父类
public class People {private String name;private char sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}
}
package com.itheima.extend;
//子类
public class Teacher extends People{private String skill;public String getSkill() {return skill;}public void setSkill(String skill) {this.skill = skill;}
}
package com.itheima.extend;public class Test {public static void main(String[] args) {Teacher t = new Teacher();t.setName("张三");t.setSex('男');t.setSkill("java");System.out.println(t.getName());System.out.println(t.getSex());System.out.println(t.getSkill());}
}


  • 权限修饰符范围:
  • private:只能本类
  • 缺省:本类、同一个包中的类
  • protected:本类,同一个包中的类、子孙类
  • public:任意位置


package com.itheima.extendfeature;public class Test {public static void main(String[] args) {Zi zi = new Zi();zi.show();}
}class Fu{String name = "fu的name";public void run(){System.out.println("fu的run");}
}class Zi extends Fu{String name = "zi的name";public void show(){String name = "show的name";System.out.println(name);//show的nameSystem.out.println(this.name);//zi的nameSystem.out.println(super.name);//fu的namerun();//zi的runsuper.run();//fu的run}public void run(){System.out.println("zi的run");}
}
  • Java是单继承的,一个类只能继承一个直接父类
  • Java不可以多继承,但可以多层继承
  • Object类是Java中所有类的祖宗
  • 在字类中访问成员变量和成员方法特点:就近原则,先找子类局部范围,子类没有找父类,父类没有就报错
  • 如果子父类中出现了重名的成员此时一定要在子类中使用父类怎么办?
  • 答:super.父类成员变量/父类成员方法


package com.itheima.extendfeature;public class Test1 {public static void main(String[] args) {Cat c = new Cat();c.cry();}
}
class Cat extends Animal{//方法重写:方法名称、形参列表必须一样,这个方法就是方法重写。//重写的规范:声明不变,重新实现。@Override//方法重写的校验注解,更安全。public void cry(){System.out.println("猫叫");}
}class Animal{public void cry(){System.out.println("动物叫");}
}
  • 方法重写:子类写了一个方法名称、形参列表与父类某个方法一样的方法去覆盖父类的该方法
  • 私有方法、静态方法不能被重写
  • 当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写。
package com.itheima.extendfeature;public class Test2 {public static void main(String[] args) {//方法重写的常见应用场景:子类重写Object类中的toString方法,以便返回对象的内容。Student s = new Student("张三", 18, '男');System.out.println(s.toString());//com.itheima.extendfeature.Student@1b6d3586 所谓的地址System.out.println(s);//com.itheima.extendfeature.Student@1b6d3586 所谓的地址//注意1:直接输出对象,默认调用Object的toString方法(可以省略不写调用toString的代码),返回对象的地址信息//注意2:输出对象的地址实际上是没有什么意义的,开发中更希望输出对象时看对象的内容信息,所以子类需要重写Object类中的toString方法//      以便以后输出对象时默认就近调用子类重写的toString方法返回对象的内容信息}
}class Student {//它的父类是Object,相当于class Student extends Objectprivate String name;private int age;private char sex;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", sex=" + sex +'}';}public Student() {}public Student(String name, int age, char sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}
}
  • 子类重写toString()方法快捷键:右键->Generate->toString()->ok
  • 在当前页查找某个单词:Control + F


package com.itheima.extendfeature;
//父类
public class People {private String name;private char sex;public People() {}public People(String name, char sex) {this.name = name;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}
}
package com.itheima.extendfeature;
//子类
public class Teacher extends People{private String skill;public Teacher() {}public Teacher(String name, String skill, char sex) {super(name, sex);//必须写在第一行this.skill = skill;}public String getSkill() {return skill;}public void setSkill(String skill) {this.skill = skill;}
}
package com.itheima.extendfeature;public class Test3 {public static void main(String[] args) {Teacher t = new Teacher("Tom","java",'男');System.out.println(t.getName());System.out.println(t.getSkill());System.out.println(t.getSex());}
}
  • 子类中的全部构造器,都必须先调用父类的构造器,再执行自己。
  • super(...)调用父类有参数构造器的常见应用场景是什么?
  • 答:为对象中包含父类这部分的成员变量进行赋值。

package com.itheima.extendfeature;public class student {private String name;private String schoolName;public student() {}public student(String name){//通过this调用兄弟构造器,可以实现创建对象时只写名字,默认学校是黑马程序员//this(...)只能放在构造器的第一行this(name,"黑马程序员");}public student(String name, String schoolName) {this.name = name;this.schoolName = schoolName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSchoolName() {return schoolName;}public void setSchoolName(String schoolName) {this.schoolName = schoolName;}@Overridepublic String toString() {return "student{" +"name='" + name + '\'' +", schoolName='" + schoolName + '\'' +'}';}
}
package com.itheima.extendfeature;public class Test3 {public static void main(String[] args) {student s1 = new student("Tom");student s2 = new student("Bob", "清华大学");System.out.println(s1);System.out.println(s2);}
}
  • 任意类的构造器中,是可以通过this(...)去调用该类的其他构造器的。
  • this(...)、super(...)都只能放在构造器的第一行,因此,不能同时出现。


http://www.xdnf.cn/news/18868.html

相关文章:

  • 小明的Java面试奇遇之发票系统相关深度实战挑战
  • 论文阅读:VACE: All-in-One Video Creation and Editing
  • 纯净Win11游戏系统|24H2专业工作站版,预装运行库,无捆绑,开机快,游戏兼容性超强!
  • Linux应急响应一般思路(二)
  • 【Docker基础】Docker-compose多容器协作案例示例:从LNMP到分布式应用集群
  • 同步阻塞和异步非阻塞是什么?
  • 学习做动画1.简易行走
  • springBoot如何加载类(以atomikos框架中的事务类为例)
  • MIT 6.5840 (Spring, 2024) 通关指南——入门篇
  • MYSQL-表的约束(下)
  • 【机器学习】5 Bayesian statistics
  • 46.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成日志
  • 前端漏洞(上)- Django debug page XSS漏洞(漏洞编号:CVE-2017-12794)
  • 【C++组件】ODB 安装与使用
  • 春秋云镜 TOISEC 部分WP
  • 3.1 存储系统概述 (答案见原书 P149)
  • 鸿蒙中Frame分析
  • NLP:Transformer各子模块作用(特别分享1)
  • 网络编程socket-Udp
  • 互联网大厂Java面试模拟:深度解析核心技术
  • 100个实用小工具1.3历年股价分析小工具新增股价批量下载
  • 使用UE5开发2.5D开放世界战略养成类游戏的硬件配置指南
  • 电子厂静电释放检测误报率↓81%!陌讯多模态融合算法在安全生产监控的落地实践
  • imx6ull-驱动开发篇38——Linux INPUT 子系统
  • MATLAB 数值计算进阶:微分方程求解与矩阵运算高效方法
  • 从 Unity UGUI 到 Unreal UMG 的交互与高效实践:UI 事件、坐标系适配与性能优化
  • WinContig:高效磁盘碎片整理工具
  • 基于蓝牙的stm32智能火灾烟雾报警系统设计
  • Golang云端编程入门指南:前沿框架与技术全景解析
  • 访问控制基础与模型综述