多态
继承是多态的前提,,如果没有继承,没有多态。
继承关系中的特点:
继承最主要解决的问题:共性抽取
使用多态的例子:
(使用多态new出来的对象,不可直接调用子类中专有的方法)
抽象父类:
public abstract class Animal { //抽象类
public abstract void eat(); //抽象方法
public Animal(){
System.out.println("抽象类的构造方法");
}
}
继承抽象父类的子类:
public class Cat extends Animal{ //继承于动物类
public void eat(){ //这个方法是被重写的
System.out.println("吃");
}
public void sleep(){ //这个方法是猫类自己新的方法
System.out.println("睡觉");
}
}
测试类:
public class Test {
public static void main(String[] args) {
Animal c=new Cat();//利用多态,用父类new子类
c.eat();//输出为:吃
c.sleep();//编译错误,因为现在c的Animal类型
Cat a=(Cat)c;//将父类的c转型为子类a,否则不可以直接调用子类中自己的方法
a.sleep();//输出为:睡觉
((Cat) c).sleep();//输出为:睡觉
}
}
抽象
抽象类,不能实现化对象,不能new;
不能创建对象的原因:如果真的让你new了对象,调用对象的方法,抽象类中的抽象方法没有主体的,根本不能运行;
抽象类的使用:定义类继承抽象类,将抽象类进行重写,创建子类的对象;
抽象方法:方法只有声明,没有方法体;
抽象类:包含抽象方法的类,一定是抽象类;
抽象类的特点:
之所以继承抽象类,更多的是在思想,是面对共性类的操作会更简单;
是的,因为不断进行共性抽取出来的;
可以,目的就是不让这个类直接创建对象;
public abstract class yuanGong {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public abstract void work();//抽象方法
}
继承的好处:
继承的弊端:
继承的特点:
继承的注意事项:
继承中成员变量的关系
不同名的变量:子类直接继承使用;
同名的变量:默认访问的是子类自己的成员变量;想访问父类中的同名变量,需要super.成员变量;
age=18;//当子类中有这个变量时默认访问子类中的成员变量
this.age=18;//访问本类中成员变量
super.age=18;//访问父类中的成员变量
方法的重写(override):
指,在子类中,出现了方法声明相同的情况
方法重写的注意事项:
方法的重载(overload):
在同一类中,多个方法名称相同,他们的参数列表不同(个数,数据类型,顺序)
//下面两个构造方法利用了方法的重载,所以不会报错
public Person(String b){
System.out.println("我是构造方法1");
}
public Person(int a){
System.out.println("我是构造方法2");
}