Java基础知识二次复习

Java基础知识二次复习

构造器Constructor是否可以被override?

构造器Constructor不能被集成,因此不能重写(Override),但可以被重载(Overload)

接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(conctrete class)?抽象类中是否可以有静态的main方法?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类也可以继承具体类。抽象类中可以有静态的main方法。

归纳:抽象类的特征是有得有失,得到的功能是抽象类可以拥有抽象方法(当然也可以没有);失去的功能的是抽象类不能创建实例了。至于其他的,抽象类于普通类在语法上大致是一样的。

写clone()方法时,通常都有一行代码,是什么?

clone()有默认行为:super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

abstract class和interface有什么区别?

含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或者抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的方法都必须要是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final

需要说明的是,Java 8增强后的接口可以定义默认方法(使用default修饰的方法)和类方法(使用static修饰的方法),接口中的默认方法和类方法都不再是抽象方法,都需要提供方法体。Java 9则允许接口中定义private方法,private方法可以拥有方法体。

下面比较一下两者的语法区别

  1. 抽象类可以有构造器,接口中不能有构造器。
  2. 抽象类中可以有普通成员变量,接口中灭有普通成员变量
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能都非抽象的普通方法。Java 8增强的接口可拥有默认方法和类方法,接口中的默认方法和类方法都不在是抽象方法,都需要提供方法体。Java 9则允许接口中定义private方法,private方法可以拥有方法体。
  4. 抽象类中的抽象方法的访问类型可以是public,protected和默认访问权限。但接口中的方法只能是public的。如果普通实例方法则必须是抽象方法,如果是默认方法则必须使用default修饰;如果是类方法则必须使用static修饰。
  5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
  6. 一个类可以实现多个接口,但只能继承一个抽象类。

下面接着再说说两者在应用上的区别:

接口更多的是在系统架构设计方法发挥作用,接口体现的是一种规范。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板模式是抽象类的一个典型应用,假设项目中需要需要使用大量的DAO组件,这些DAO组件通常都具有增、删、改、查等基本方法,因此我们就可以定义一个抽象的DAO基类,然后让其他DAO组件来继承这个DAO基类,把这个DAO基类当成模板使用。

abract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!

native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它不能抽象的,不能与abstrat混用。

JDK中那些类是不能继承的?

使用final修饰的类都不可以被继承

实际上即使自己开发的类,也可以通过使用final修饰来阻止被继承。通过final修饰的类被为最终类,最终类不能派生子类,这样该类就被完全地封闭起来了,不会有子类来重写它的方法,因此更加安全。

去掉一个Vector集合中重复的元素
Vector newVector=new Vector();
for(int i=0;i<vector.size();i++){
    Object obj=vector.get(i);
    if(!newVector.coutains(obj))
    {
        newVector.add(obj);
    }
}

另外,还有一种更见简单的方式:将Vector添加到HashSet,例如如下代码:

HashSet set=new HashSet(vector);

但上面代码将会导致Vector中元素丢失顺序。

Java基础语法思维导图
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值