java 抽象类中构造函数的作用

#抽象类

何为抽象类?
答:abstract修饰的类为抽象类。
何为抽象成员函数
答:abstract修饰的类为抽象成员函数。
抽象类与抽象成员函数有何联系?
答:有抽象函数的类必须被生命为抽象类,但是抽象函数中也可以有非抽象函数、也可以有构造函数。
1.abstract修饰class声明一个抽象类。
2.abstract修饰一个成员函数表示该成员函数为抽象成员函数该函数没有函数体只能以;结束;
3.抽象类不能创建实例,即不能用new创建对象,哪怕抽象类中没有抽象方法;
4.抽象类中可以有

#接口(完全抽象类)

1.变量都是public statIc final 常量;
2.方法都是抽象方法;且都是默认public abstract
3.实现接口时重写方法都要声明public。

毋庸置疑抽象类中可以定义构造函数,但是这时会有一个疑问,既然抽象类的实例化毫无意义那为何又要定义其自己的构造函数呢?
首先,可以通过其内部的构造函数初始化其内部的变量。
其次,可以通过实现它的子类通过super()调用其内部构造函数。实质上就是调用父类构造函数初始化自己的成员变量。
在此附上两张图大家更好地理解一下。
java 抽象类中构造函数的作用

#java抽象类接口的一些例题

1.以下方法错误的是(A D)
A 覆盖方法包括成员方法的覆盖和成员变量的覆盖
B 成员方法的覆盖是多态的一种表现形式
C 子类可以调用父类中被覆盖的方法
D 任何方法都可以被覆盖
分析:在子类中调用父类方法使用super关键字。super.a() 就可以调用父类的a方法。 
在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。
如果子类本身没有定义使用this关键字可以去访问父类的成员变量。
最后final修饰的方法不能被覆盖 覆盖即重写和重载一起都是多态的表现形式。

2.下面说法正确的是(C H)
A instanceof 关键字用来判定某个类是否为抽象类。
B final关键字修饰的成员变量不需要初始化。
C 接口的方法都是抽象方法(jdk1.8之前),并且没有方法体
D 当我们继承一个抽象类时,我们必须要实现抽象类的抽象方法。
E 在向上转型的过程中,如果父类和子类拥有相同的名字的成员方法(非静态)
访问的是子类的该方法。如果父类和子类拥有名字的成员变量时,访问的是子类的成员变量。
F 内部类访问为外部类方法时,不用创建外部类对象直接访问外部类方法。
G 内部类变量不能设置为static,也不能设置为final
H 多态通常用来作为参数传入或者作为返回值返回。

3.下面说法不正确得是(A C D E)
A 不能和abstract一起使用的修饰符有static final public final
B 抽象类之间是继承关系,接口之间也是。
C 接口不能存在普通方法和常量
D局部内部类public,private修饰符修饰
E接口不可以直接实例化,抽象类可以

4.下面有那些选项是对的(B C E)
A instanceof是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例,返回的是布尔类型
B private protected 和static都不可以修饰interface接口
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D对象是对类的抽象化
E 接口中可以有常量
分析 接口可以有常量(jdk1.8以后) instanceof 是一个二元修饰符,作用是用来判断左边的对象是否是右边类的实例 或者是右边超类的实例

5.以下说法正确的是 ( B )
对于方法内得形参()
A 必须定义多个形参
B 可以没有
C 至少有一个
D 只能是简单变量

6.以下说法正确的是( C )
A 对于局部内部类,不能在class前加任何修饰符(public default private protected)来修饰B 只要没有定义不带参数的构造函数,JVM都会为类生成一个默认的构造函数
C 向上转型中,父类与子类拥有相同名字的普通方法时,访问的是子类的成员方法
D单例模式中类的构造方法使用private修饰,声明为私有,这样就不能在类的外部使用new关键字来创建实例对象了

7.final修饰的方法不可重写的(子类不能重写父类final方法,但是可以调用)

8.以下说法正确的是(E G)
A 抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造对象
B 接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰符修饰
C 类是对象的抽象模型,刻画了对象中所有信息
D 抽象方法不能用final来修饰 ,可以用satic来修饰
E 对计算公式已不需要更改的书数学哈书,常用public static final 来修饰;
F 若类中有final abstract来修饰 的 方法 ,必须实现该方法才能构造对象。
G 引用是对象的名字,引用值是对象的起始地址

9.下列的说法错误的是(B)
A 抽象类必须被子类继承
B 对象向上转型以后,拥有相同名字的普通成员变量(静态变量)时,访问的是子类里面的
C super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法的第一行
D 接口的方法必须定义为public权限,并且只能是抽象方法(不考虑jdk1.8)

10.下面那些选项是错误的(A B D E)
A instanceof 是一个二元操作符,只用来判断左边的对象是否是右边的类的实例,返回是布尔型
B 成员内部类可以使用任何修饰符修饰,可以定义常量和静态变量
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D 在成员方法里面叫做局部内部类,可以访问外部类属性和使用任何修饰符,但使用局部内部类方法时 ,必须实例化内部类对象
E 实现内部类的调用,要直接实例化内部类

11 下列定义,正确的有哪些( A B C)
A接口只能做方法申明,抽象类中就可以做方法实现和方法申明
B 抽象类中的抽象方法只能申明,不能实现.abstract void abc();不能加{}
C 抽象方法要被实现,所以不能是静态的,也不能是私有的
D 接口里只能有公共方法,1.8以后 可以有普通方法和成员变量
E 类实现接口,利用关键字implement 完成 (错误 注意为implements)

12以下说法不正确的有(A B C D)
A拥有抽象方法的类为抽象类
B抽象类的方法时抽象方法
C继承抽象类的子类为抽象类
D实现接口的类为抽象类

13 下列说法正确的是 ( A )
A Java程序中的main方法必须写在类里面
B Java程序中可以有多个main方法
C Java程序中类名必须和文件名一样
DJava程序的main方法中如果只有一条语句,可以不用大括号括起来
E在类中声明一个整数数组作为成员变量,如果没有给他赋值,数值元素值为空
F数组本身是一个对象

14 如果在子类继承父类,子类构造方法中没有注明时默认第一行调用父类的空参构造方法

15 下列说法正确的是(A B C)
A try块不可以省略
B 可以使用多重catch块
C finally块可以省略
D catch块和finally块可以同时省略

16 以下对自定义异常描述正确得是(A C)
A 自定义异常必须继承Exception
B 自定义异常必须继承Error
C 自定义异常可以更加明确地确定异常出错位置和详细详细
D程序中已经提供了丰富的异常类,使用自定义异常没有意义

17在JAVA中关于抽象类的描述正确的说(D)
A 抽象类可以被实例化
B 如果一个类中有一个方法被声明为抽象的这个类必须是抽象类
C 抽象类的方法必须是抽象的
D 声明抽象类必须带有abstract关键字

#抽象类 接口 内部类 final 覆盖 重写 多态 相关例题

在JAVA中关于抽象类的描述正确的是 C

A、抽象类可以被实例化
B、如果一个类中有一个方法被声明为抽象的这个类必须是抽象类
C、声明抽象类必须带有abstract关键字
D、抽象类的方法必须是抽象的
2.
以下说法不正确的有 ABCD

A、拥有抽象方法的类为抽象类 // 没有抽象方法的类也为抽象类
B、抽象类的方法时抽象方法 //也可以是已经实现的方法
C、继承抽象类的子类为抽象类 //但没完全实现
D、实现接口的类为抽象类
3.
下列定义,正确的有哪些 ACD

A、接口只能做方法申明,抽象类中就可以做方法实现和方法申明
B、接口里只能有公共方法,1.8以后 可以有普通方法和成员变量
C、抽象类中的抽象方法只能申明,不能实现.abstract void abc();不能加{}
D、抽象方法要被实现,所以不能是静态的,也不能是私有的
E、类实现接口,利用关键字implement 完成
4.
以下说法正确的是CE

A、类是对象的抽象模型,刻画了对象中所有信息
B、抽象方法不能用final来修饰 ,可以用satic来修饰
C、对计算公式已不需要更改的数学函数,常用public static final 来修饰;
D、若类中有final abstract来修饰 的 方法 ,必须实现该方法才能构造对象。
E、引用是对象的名字,引用值是对象的起始地址
5.
下列的说法错误的是 BDE

A、抽象类必须被子类继承
B、对象向上转型以后,拥有相同名字的**普通成员变量(静态变量)**时,访问的是子类里面的
//多态成员变量跟成员函数都可重写,但是只有成员函数被覆盖,向上转型之后访问成员函数是子类中重写的函数,但是成员变量是对应父类对象内存空间的。
C、super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法的第一行
D、抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造对象
//抽象类
E、接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰符修饰?
java 抽象类中构造函数的作用

6.
下面说法不正确得是ABCD

A、不能和abstract一起使用的修饰符有static final public final
B、接口不能存在普通方法和常量
C、局部内部类public,private修饰符修饰
D、接口不可以直接实例化,抽象类可以
7.
以下方法错误的是 AB

A、覆盖方法包括成员方法的覆盖和成员变量的覆盖
B、任何方法都可以被覆盖
C、成员方法的覆盖是多态的一种表现形式
D、子类可以调用父类中被覆盖的方法
8.
Person类和Test类的代码如下所示,则代码中的错误语句是C

public class Person {
public String name;
public Person(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
final Person person = new Person(“欧欧”);
person.name = “美美”;
person = new Person(“亚亚”);
}
}
A、final Person person = new Person(“欧欧”);
B、person.name = “美美”;
C、person = new Person(“亚亚”);
D、没有错误
9.
如下Java代码运行的结果是C

public class Test {
final int age;
public Test(){
age=10;
}
public static void main(String[ ] args) {
System.out.println(new Test().age);
}
}
A、输出:0
B、输出:null
C、输出:10
D、运行时出现异常
10.
以下代码中错误的语句有几处D

public class Something{
public static void main(String[] args){
final Other o=new Other();
new Something().addOne(o);//1
}
public void addOne( Other o){
o.i++;//2
o = new Other();//3
}
}
class Other{
public int i;
}
A、1
B、2
C、3
D、0