[置顶] java面向对象的继承以及方法重写和重载

时间:2021-04-04 16:12:34

java面向对象的继承

public class ExtendsTest {/** 把多个类中相同的成员提取出来定义到一个独立的类中。* 然后让多个类和该类产生联系。这多个类就具备了这些内容。这个关系叫做继承* * 继承的格式:* 修饰符 class 子类名 extends 父类名 { ... }* 继承的好处:* 1.提高类代码的复用性.提高了代码的维护性* 3.让类与类之间产生了一个关系,这就是多态的前提* 继承的缺点:* 1.(java开发原则)低耦合,高内聚。* 耦合:就是类与类之间的关系* 内聚:独立完成某与类之间些功能的能力* 继承就是让类的耦合的增强。某个类改变,就会影响和它相关的类* 2.打破了封装性* 继承的特点:* 1.java中的类只支持单继承;* 2.但是可以多层(重)继承。* 继承中的注意事项:* 1.子类不能继承父类的私有成员变量和成员方法。* 2.子类不能继承父类的构造方法,但是可以通过super去访问* 3.不要为了部分功能去继承。* 子类是父类的一种(是否使用继承的判断条件之一)。* java继承中的成员关系:* 1.成员变量:* 1).子类的成员变量名称和父类的成员变量名称不一样的时候。* 2).子类的成员变量名称和父类的成员变量名称一样的时候,访问哪一个呢?* 局部变量 --》子类-->父类--》父类的父类* 子类的方法访问变量的查找顺序:* 在子类成员方法的局部范围找,有就使用* 在子类的成员变量里找,有就使用* 在父类的成员变量里找,有就使用* 找不到,就报错* 2.构造方法:* 1).子类的构造方法会默认取访问父类的无参的构造方法* 是为了子类访问父类的数据进行初始化* 2).父类中如果没有无参的构造方法。???* 子类通过super去明确调用的父类的构造方法* 子类通过this调用本身的其他构造,但是一定会有一个去访问父类的构造* 父类提供一个无参构造方法* 3.成员方法* 1).子类的成员方法名称和父类的成员方法名称不一样的时候。* 2).子类的成员方法名称和父类的成员方法名称一样的时候。* 通过子类对象访问一个方法的查找顺序:* 在子类中找,有就使用* 在父类中找,有就使用* 。。。* 找不到就报错。* 方法重写和方法重载(混淆点)* 方法重写:在子类中,出现了和父类一模一样的方法声明的现象* 方法重载:在同一个类中,出现的方法名相同,参数列表不同的现象。(返回值类型也可以更改)* this和super:* this:代表当前类的对象的引用* super:代表父类的存储空间的标识。(就是父类的引用),通过super可以访问父类的成员。* 使用场景:* 成员变量: this.成员变量(本类的)* super.成员变量(父类的)* 构造方法:* this(...)(本类的)* super(...)(父类的)* 成员方法:* this.成员方法(本类的)* super.成员方法(父类的)*/public static void main(String[] args) {Doctor doctor = new Doctor();doctor.setName("zhangsan");doctor.setAge(50);doctor.setDepartment("耳鼻喉科");doctor.setJiBie("一级");Teacher teacher1 = new Teacher();Teacher teacher2 = new Teacher(555)doctor.name;doctor.eat();doctor.work();doctor.print();teacher.eat();teacher.setAge(30);//子类对象调用父类方法teacher.work();Police police = new Police();police.eat();String name = police.getName();System.out.println(name);}}class People{int a = 1000;private String name;private int age;public People(){System.out.println("这是父类的无参的构造方法");}public People(int a){System.out.println("这是父类的有参的构造方法");}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;}private void eat(){System.out.println("是人就要喝营养液");}public void work(){System.out.println("我就是你们的爹");}}
class Men extends People{int a = 100;private String name;private final boolean sex = false;
public boolean isSex() {return sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
/*** 医生类* @author root**/class Doctor extends Men{int a = 10;private String department;//科室private String jiBie;//职业级别public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public String getJiBie() {return jiBie;}public void setJiBie(String jiBie) {this.jiBie = jiBie;}public void work(){super.work();System.out.println("医生给病人看病去了");}public void print(){int a = 1;System.out.println(super.a);}}/*** 老师类* @author root**/class Teacher extends People{private String subject;//任教科目private String jiBie;//教师级别public Teacher(){// super();System.out.println("这是子类无参的构造方法");}public Teacher(int a){super(54);System.out.println("这是子类有参的构造方法");}public Teacher(String subject, String jiBie) {super(36);//调用父类的构造方法,默认隐藏的this.subject = subject;this.jiBie = jiBie;}
public String getSubject() {return subject;}
public void setSubject(String subject) {this.subject = subject;}
public String getJiBie() {return jiBie;}
public void setJiBie(String jiBie) {this.jiBie = jiBie;}public void work(){System.out.println("老师去给学生上课了");}}/*** 警察类*/class Police extends People{private String leiBie;//工作类别private String jiBie;//警官级别public String getLeiBie() {return leiBie;}public void setLeiBie(String leiBie) {this.leiBie = leiBie;}public String getJiBie() {return jiBie;}public void setJiBie(String jiBie) {this.jiBie = jiBie;}public void work(){System.out.println("警察开始为人民服务了");}}