javaSE21/10/12

继承

  • 重写的方法类型可以是父类方法类型的子类型
    如父类方法Object get(),子类是Integer get()也属于方法重写
  • 访问权限修饰符从高到低:public protected 友好的 private
  • 子类重写父类方法时,不允许降低访问权限,可以提高

关于super

public class TextSuper {
    public static void main(String[] args) {
        Aver aver = new Aver();
        aver.n = 100;
        float r1 = aver.f();
        float r2 = aver.g();
        System.out.println("r1 = "+r1);//输出结果为50.5,super.n = 100
        System.out.println("r2 = "+r2);//输出结果为2525.0,在调用g()方法时父类的n已经改变
        /*
         float r2 = aver.g();先调用g()时,父类的n为默认值0,所以输出0.0
         float r1 = aver.f();
         */

    }
}
class Sum{
    int  n;
    float f(){
        float sum = 0;
        for (int i = 0; i <= n; i++) {
            sum +=i;
        }
        return sum;
    }
}
class Aver extends Sum{
    int n;

    @Override
    float f() {
        float c;
        super.n = n;
        c=super.f();
        return c/n;
    }
    float g(){
        float c;
        c=super.f();
        return c/2;
    }
}

对象的上转型对象

  • 当子类创建一个对象时,把这个对象的=引用放到放到父类的对象中
    如:Animal a;
    Tiger b = new Tiger();
    a = b;

abstract类和abstract方法

  • 抽象方法只有声明,没有实现
  • 抽象类不能new,可以new它的子类,继承抽象类的非抽象类必须重写父类的方法
  • final和abstract不能同时修饰类和方法,final修饰的类不能有子类,修饰的方法不能重写,而抽象类的子类必须重写父类的方法
  • 不能用static修饰抽象方法

面向抽象编程是为了应对用户需求的变化,将某各类中因需求变化而改动的代码从该类中分离出去,交给子类实现

开闭原则:对扩展开放,对修改关闭

  • 应用举例
abstract public class SIM {//抽象一个卡,卡需要设置卡号,要有所属公司,能获取卡号
    public abstract void setNumber(String n);
    public abstract String giveNumber();
    public abstract String giveCorpName();
}
public class SIMOfChinaMobile extends SIM{//卡的类型一
    String number;
    @Override
    public void setNumber(String n) {
        number = n;
    }

    @Override
    public String giveNumber() {
        return number;
    }

    @Override
    public String giveCorpName() {
        return "中国移动";
    }
}
public class SIMOfChinaUnicom extends SIM{
    String number;
    @Override
    public void setNumber(String n) {
        number =  n;
    }

    @Override
    public String giveNumber() {
        return number;
    }

    @Override
    public String giveCorpName() {
        return "中国联通";
    }
}
public class MobileTelephone {
    SIM card;//用有另一个类作对象的对象
    void useSIM(SIM card){
        this.card = card;
    }
    void show(){
        System.out.println("使用的卡是:"+card.giveCorpName());
        System.out.println("手机号码是:"+card.giveNumber());
    }
}
public class Application {
    public static void main(String[] args) {
        MobileTelephone mobileTelephone = new MobileTelephone();
        SIM sim = new SIMOfChinaMobile();//sim为上转型对象,所以可以访问他的子类的方法
        sim.setNumber("15288888888");
        mobileTelephone.useSIM(sim);
        mobileTelephone.show();
    }
}
posted @ 2021-10-12 21:37  想吃坚果  阅读(49)  评论(0)    收藏  举报