多态
多态:一个事物的多种不同状态(例如你在家可以是子女、或者父母,在社会上你可以是老板、员工…);
多态前提:a:要有继承关系;b:子类要有方法重写,如果重写方法,该方法没有说明,则没有意义;c:要有
父类引用指向子类对象 父类 名称=new 子类;
多态成员访问特点:1.访问成员变量 编译看左边(父类),运行看左边;
2.访问构造方法 创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化;
3.访问成员方法 编译看左边,运行看右边(子类);
4.访问静态方法 编译看左边(父类),运行看左边;
多态的好处:提高了代码的维护性和扩展性;
多态的弊端:不能使用子类特有的功能;解决:将父类引用强制转换为子类引用(向下转型);
public void show() {
System.out.println("父类show方法");
}
}
public class Zi extends Fu {
public void show() {
System.out.println("子类的show方法");
}
public void method() {
System.out.println("子类的method方法" );
}
}
public class Test {
public static void main(String[] args){
Fu f = new Zi();
//f.method();父类无法访问子类特有的方法
f.show();//多态访问成员方法 编译看父类,运行看子类;
}
}
子类的show方法
public void show() {
show2();
}
public void show2() {
System.out.println("我");
}
}
public class B extends A {
public void show2() {
System.out.println("爱");
}
}
public class C extends B{
public void show() {
super.show();
}
public void show2() {
System.out.println("你");
}
}
public class Test {
public static void main(String[] args) {
A a = new B();
a.show();//爱//A中show()输出为show()2,子类B输出为爱
B b = new C();
b.show();//你//c继承b,b继承a,b中无show(),但是a中有输出为show()2 c对show()2改写输出为你
}
}
抽象类 (关键字 abstract)
抽象类:一个类中如果有包含抽象方法,则该类定义为抽象类;
特点:1.抽象类和抽象方法必须使用关键字abstract修饰;2.抽象象类中一定有抽象方法,可以有非抽象方法;3.如果一个类继承了抽象类,那么该类必须要有方法重写,亦或是该类也是抽象类;4.抽象类无法进行实例化;
抽象类成员特点:1.抽象类包含的成员方法既可以是抽象的也可以是非抽象的2.既可以含有变量也可以有常量3.可以有构造方法,但不能实例化,用于子类访问父类数据初始化;
public abstract void eat();
public abstract void sleep();
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫白天睡觉");
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void sleep() {
System.out.println("狗白天睡觉");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.sleep();
System.out.println("---------------------------------");
Dog dog = new Dog();
dog.eat();
dog.sleep();
}
}
猫吃鱼
猫白天睡觉
---------------------------------
狗吃骨头
狗白天睡觉
接口 关键字(interface)
接口:定义某一对象特有的功能,体现事物的扩展性,但是不能给出具体实现;
特点:1.关键字:interface;实现接口: implements;2.接口不能实例化;3.接口的子类要重写接口中所有的抽象方法;
成员特点:1.只能是常量,并且是静态的,默认修饰符:public static final;2.接口中没有构造方法;3.接口中只能是抽象方法,默认修饰符:public abstract;