Java面向对象之多态、抽象类、接口

多态

多态:一个事物的多种不同状态(例如你在家可以是子女、或者父母,在社会上你可以是老板、员工…);
多态前提: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;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/chioaR/article/details/83095211