Android应用开发----继承、重写、多态

一.继承
二.重写父类
三.多态

一.继承

面向对象的编程语言特点之一就是代码复用性更强,继承则是这一特点的基础。

java语言继承规则和继承特点:
1.只能直接继承于一个类
2.可以继承父类的属性和方法,但不能继承父类的构造方法
3.通过继承,可以继承除去构造方法外的所有方法和属性,但私有方法和属性只能通过调用父类提供的访问方法访问。

继承格式:

修饰符 Class 子类名字 extend 父类名字{
}

继承原则:

1.在访问子类中成员变量或方法时,先去子类中寻找子类中的变量和方法,没有则去父类中查找,再没有就编译不通过。
2.访问问到被子类重写的方法时,有先使用被重写的方法。
3.要向父类方法传递参数时使用super(参数)函数。(该函数只能在构造函数的第一句)

二.重写

重写格式:

   @Override
    修饰符 返回值 被重写方法名(参数列表){
   
    }

重写原则:

1.必须保证被重写的方法名相同,参数列表相同
@override只是帮助检查是否重写错误,可以省区
2.被重写方法返回值范围一定要小于等于父类方法返回值范围
3.修饰符范围要大于等于父类方法返回值范围。

三.多态

多态:多态是同一个行为具有多个不同表现形式或形态的能力。
下面例子中在Human的Car方法里参数是Parent类,但后面使用是却用的Child类但程序可正常运行,就是多态的体现,
多态特点:
1.只能把子类对象传给父类,不能父类传给子类
2.如果要使某个子类独有方法时可以用条件语句限制,再将将其强转

public class Parent {
    private float high;//定义一个私有变量,它不可被子类直接访问,但可被间接访问
    private int weight;

    public Parent(float high){
        System.out.println("Parent");
        this.high = high;
    }

    public void eat(){
        System.out.println("Parent--->eat()方法被调用!");
    }

    public void sleep(){
        System.out.println("Parent--->sleep()方法被调用!");
    }
    private void think(){
        System.out.println("Parent--->think()方法被调用!");
    }

    public void appearance(int high){
        System.out.println("Parent high = " + high);
        System.out.println("Parent weight = " + weight);
    }

    public void gethigh(){
        System.out.println(high);
    }

    public void car(){
        System.out.println("我有一量车");
    }
    public void test(){
        System.out.println("此方法Child2独有!");
    }
}
public class Child1 extends Parent {

    public Child1(float highs){
        super(highs);
        System.out.println("Child");
    }

    @Override//@override不是必须的,写上它可以帮助检查重写是否有误
    public void eat() {
        System.out.println("子类修改了eat()方法!");
    }

    @Override
    public void car() {
        System.out.println("我有一辆宝马");
    }
}
public class Child2 extends Parent{

    public Child2(float high) {
        super(high);
    }

    @Override
    public void car() {
        System.out.println("我有一辆奔驰");
    }
}
public class Human {
    public void car(Parent parent) {
        parent.car();
        if (parent instanceof Child2) {//instanceof判断某个前者类型是不是后者类型
            Child2 child2 = (Child2) parent;
            child2.test();
        }
    }

}
public class Main {

    public static void main(String[] args) {
        Child1 child1 = new Child1(1.8f);
        child1.eat() ;
        child1.sleep();
        child1.gethigh();

        Child2 child2 = new Child2(1.5f);
        Human human = new Human();
        human.car(child1);//这里参数类型时Parent但传值却是Child1类,就是多态的体现
        human.car(child2);
    }
}

你可能感兴趣的:(Android应用开发----继承、重写、多态)