软件构造期末复习05 继承,重写,泛型

一、在接口中实现方法
  • default关键字
  • static关键字
二、几种关键字的区别
作用域当前类同一包内子孙类(不同包)其他包
publicTTTT
protectedTTTF
defaultTTFF
privateTFFF
三、Overload和Overwrite
区分Overload和Overwrite
  • 前者是不同的signature,后者是相同的signature
  • Overload在编译时决定,Overwrite在运行时决定
  • 例子:
class Animal {
    public void eat() {}
}

class Horse extends Animal {
    public void eat(String food) {}
}

class UseAnimals {
    public void doStuff(Animal a) {
        System.out.println("Animal");
    }
    public void doStuff(Horse h) {
        System.out.println("Horse");
    } 
}

public class Main {
    public static void main(String[] args) {
        UseAnimals ua = new UseAnimals();
        Animal animalobj = new Animal();
        Horse horseobj = new Horse();
        Animal animalRefToHorse = new Horse();
        ua.doStuff(animalobj);  //输出Animal
        ua.doStuff(horseobj);  // 输出Horse
        ua.doStuff(animalRefToHorse);  // 输出Animal
    }
}
  • 注 : 返回值不同不能区分signature
四、泛型,通配符
泛型的性质
  • 运行时,泛型消失。所以不能使用instanceof
上界通配符 <? extends E>
  • 例 :
static int countLegs (List<? extends Animal > animals ) {
    int retVal = 0;
    for ( Animal animal : animals )
    {
        retVal += animal.countLegs();
    }
    return retVal;
}

static int countLegs1 (List< Animal > animals ){
    int retVal = 0;
    for ( Animal animal : animals )
    {
        retVal += animal.countLegs();
    }
    return retVal;
}

public static void main(String[] args) {
    List<Dog> dogs = new ArrayList<>();
    countLegs( dogs );  // 不会报错
    countLegs1(dogs);  // 报错
}
  • 注 : ?也可以是 E
下界通配符 <? super E>
  • 例 :
private <T> void test(List<? super T> dst, List<T> src){
    // ?是T或T的父类,所以能装下?的List也能装下T
    for (T t : src) {
        dst.add(t);
    }
}

    List<Dog> dogs = new ArrayList<>();
    List<Animal> animals = new ArrayList<>();
    test(animals,dogs);
  • 注 : ?也可以是 E
?和 T 的区别
  • T可以用来确保泛型参数的一致性
// 通过 T 来 确保 泛型参数的一致性
public <T extends Number> void test(List<T> dest, List<T> src)

//通配符是 不确定的,所以这个方法不能保证两个 List 具有相同的元素类型
public void test(List<? extends Number> dest, List<? extends Number> src)
五、如何设计immutable类型
  • Don’t provide any mutators
  • Ensure that no methods may be overridden
  • Make all fields final
  • Make all fields private
  • Ensure security of any mutable components (avoid rep exposure)
  • Implement toString(), hashCode(), clone(), equals(), etc.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值