接口
选择题:
1)下面关于接口的说法中不正确的是(C)。
A.接口中所有的方法都是抽象的
B.接口中所有的方法都是public访问权限
C.子接口继承父接口所用的关键字是implements
D.接口是Java中的特殊类,包含常量和抽象方法
2)Java语言接口间的继承关系是(A)。
A.单继承 B.多重继承 C.不能继承 D.不一定
3)一个类实现接口的情况是(A)。
A.一次可以实现多个接口 B.一次只能实现一个接口
C.不能实现接口 D.不一定
写出程序结果
interface A{}
class B implements A{
public String func(){
return "func";
}
}
class Demo{
public static void main(String[] args){
A a=new B();
System.out.println(a.func());
}
}
编译失败:因为A接口中并未定义func方法。
内部类
Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现
有一个Car类,有属性temperature(温度),车内有Air(空调),有吹风的功能flow,Air会监视车内的温度,如果温度超过40度则吹冷气。如果温度低于0度则吹暖气,如果在这之间则关掉空调。实例化具有不同温度的Car对象,调用空调的flow方法,测试空调吹的风是否正确
答:
class Car{
double temperaturetemperature;
public Car(double temperaturetemperature) {
this.temperaturetemperature = temperaturetemperature;
}
class Air{
void flow(double a){
if(a > 40){
System.out.println("吹冷风");
}else if(a < 0){
System.out.println("吹暖风");
}else {
System.out.println("关闭状态");
}
}
}
}
public static void main(String[] args) {
Car car = new Car(41);
Car.Air air = car.new Air();
air.flow(car.temperaturetemperature);
}
抽象类与抽象方法
abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized?
答:都不能
抽象类和抽象方法之间的关系
定义抽象类和抽象方法的关键字是(abstract)。抽象类中(可以)(可以/不可以)有抽象方法,(不可以)(可以/不可以)有普通方法(可以)(可以/不可以)有属性;一个类中定义了抽象方法,那这个类(必须)(必须/不必须)用abstract修饰,即抽象类。
判断题
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}
这有何错误?
答案: 错。abstract method必须以分号结尾,且不带花括号。
是否可以通过编译?
abstract class Something {
private abstract String doSomething ();
}
答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。
简单工厂模式
叙述工厂模式的设计理念
有一个交通工具接口类Vehicles,有work接口,有Horse类和Boat类分别实现Vehicles,创建交通工具工厂类,有两个方法分别获得交通工具Horse和Boat;有Person类,有name和Vehicles属性,在构造器中赋值,实例化“唐僧”,一般情况下用Horse作为交通工具,遇到大河时用Boat作为交通工具。
答:
interface Vehicles{
void a();
}
class Horse implements Vehicles{
@Override
public void a() {
System.out.println("我是马");
}
}
class Boat implements Vehicles{
@Override
public void a() {
System.out.println("我是船");
}
}
class Person{
String name;
Vehicles vehicles;
public Person(String name, Vehicles vehicles) {
this.name = name;
this.vehicles = vehicles;
}
}
public static Vehicles getJT(String name){
Vehicles an = null;
if("河".equals(name)){
an = new Boat();
}else {
an = new Horse();
}
return an;
}
public static void main(String[] args) {
Person p = new Person("唐增",getJT("河"));
p.vehicles.a();
}
static的使用
是否可以从一个static方法内部发出对非static方法的调用?
答:不可以,如果其中包含对象的method();不能保证对象初始化.
public class Demo { private static int j = 0; private static boolean methodB(int k) { j += k; return true; } public static void methodA(int i) { boolean b; b = i < 10 | methodB(4); b = i < 10 || methodB(8); } public static void main(String args[]) { methodA(0); System.out.println(j); } } |
每日一练
- 写出一维数组初始化的两种方式
int[] arr = new int[]
int[] arr = {}
- 写出二维数组初始化的两种方式
int[][] arr = {{1,2},{2,3}};
int[][] arr = new arr[3]{};
- 如何遍历如下的二维数组
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,7}};
for(int i = 0;i < arr2.length;i++){
for (int j = 0;j < arr2[i].length;j++){
System.out.println(arr2[i][j]);
}
}
- 不同类型的一维数组元素的默认初始化值各是多少
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0
char 0 或写为:’\u0000’(表现为空)
boolean false
引用类型 null
- 一维数组的内存解析:
String[] strs = new String[5];
strs[2] = “Tom”;
strs = new String[3];