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

来源:互联网 发布:淘宝易行堂 编辑:程序博客网 时间:2024/04/26 01:30

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("警察开始为人民服务了");
}
}



0 0