对于面向对象进行了更加深入的学习
继承:
通常使用extends使两个类之间建立继承关系
例如:public class 子类 extends 父类
使用继承的好处:
1.子类重复代码可以抽取到父类中,提高代码的复用性
2.子类可以在父类的基础上增加新的功能,使子类更加强大
什么时候使用继承:
一般当类与类之间存在共性的内容,并满足子类是父类的一种时可以使用继承
继承父类的子类有一些特点:
1.子类可以得到父类的属性和行为,子类可以继续使用
2.子类可以在父类的基础上进行扩充
继承的特点:
在JAVA中,只支持单继承,不支持多继承,但支持多层继承
我们都知道类可以分为构造方法、成员变量、成员方法,但在父类中类的继承却不同
构造方法 | 非私有不能 | private不能 |
成员变量 | 非私有能 | private能 |
成员方法 | 虚方法表能 | 其他都不能 |
在继承中还会出现方法的重写:
当父类中方法无法满足子类现在的需求时,就需要对方法进行重写,在重写的方法后需要加上@Override来检验子类重写时语法是否正确
方法重写的本质就是覆盖虚方法表中的方法
在继承中成员变量的访问存在一些特点:
1.this调用要采取就近原则(this理解为一个变量,表示当前方法调用者的地址值)
2.super调用要直接找父类(代表父类存储空间)
构造方法的特点:
1.子类不能直接继承父类的构造方法,但是可以通过super调用
2.子类构造方法的第一条必为super()
多态:
多态就是同类型的对象,表示出的不同形态
多态的表现形式:
父类类型 对象名称 =子类对象
多态的前提:
1.有继承关系
2.有父类引用子类对象
3.有方法重写
多态的弊端:
1.不能调用子类的特有功能
2.编译时先看父类中是否有需要的方法,没有直接报错(“编译看左边,运行看右边”)
解决多态弊端的方法:
可以使用一个instanceof来进行转换,从而得到我们想要的类型
例如:A instanceof 子类 B
多态的优势:
在方法中使用父类作为参数可以吸收所有子类对象
--------------------------------
用继承来写了一个小练习
把厨师和经理作为子类,构建一个具有相同功能的父类(打工人),在test类里进行调用,对于厨师和经理特殊的功能要在对应的类里构建相应的方法
package 继承2;
public class test {
public static void main(String[] args) {
manager a=new manager("123","zs",12312,23212);
System.out.println(a.getId()+","+a.getName()+","+a.getSalary()+","+a.getBonus());
a.work();
a.eat();
cook c=new cook();
c.setId("234");
c.setName("as");
c.setSalary(23213);
System.out.println(c.getId()+","+c.getName()+","+c.getSalary());
}
}
package 继承2;
public class employee {
private String id;
private String name;
private int salary;
public employee() {
}
public employee(String id, String name, int salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public void work(){
System.out.println("员工在工作");
}
public void eat(){
System.out.println("在吃饭");
}
}
package 继承2;
public class cook extends employee{
public cook() {
}
public cook(String id, String name, int salary) {
super(id, name, salary);
}
public void work(){
System.out.println("厨师在炒菜");
}
}
package 继承2;
public class manager extends employee{
private double bonus;
public manager() {
}
public manager(String id, String name, int salary, double bonus) {
super(id, name, salary);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public void work(){
System.out.println("管理其他人");
}
}