一、
1.Java支持的数据类型有哪些?什么是自动拆装箱?
答:数据类型:byte, short,int, long, char, boolean, float, double;
自动拆箱:自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
2.接口和抽象类的区别是什么?
答:1)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
2)类可以实现很多个接口,但是只能继承一个抽象类
3)类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
4)抽象类可以在不提供接口方法实现的情况下实现接口。
5)Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
6)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
7)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
3.接口是否可继承接口?接口类是否实现接口?接口类是否可继承实体
答:接口可以继承接口;接口类可以实现接口,接口类可以继承接口类,但是实体类必须有构造函数。
面试常考题
1、Java抽象类可以有构造函数吗?
答:抽象类可以有构造函数,接口不可以有。
2、Java抽象类可以实现接口吗?它们需要实现所有的方法吗?
答:子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。
3、Java抽象类可以是final的吗?
答:、abstract不能与final并列修饰同一个类。
4、Java抽象类可以有static方法吗?
答:抽象方法可以有public、protected和default这些修饰符
abstract 不能与private、static、final或native并列修饰同一个方法。
5、可以创建抽象类的实例吗?
答:不可以。
6、抽象类必须有抽象方法吗?
答:不是必须,抽象和非抽象的都可以。
7、Java抽象类和接口有何不同?(同上题的2)
8、何时选用抽象类而不是接口?
答:抽象类的设计模式是自下而上的,而接口是自上而下的。当所设计的多个类中可以抽象出一个共同的类,这个时候适合抽象类,而不用接口。
三、程序题
Shape接口
public interface Shape {
public void Perimeter();
public void Area();
}
Rect类
package Day06;
public class Rect implements Shape {
private int length; //矩形的长
private int width; //矩形的宽
//构造方法
public Rect(int length, int width){
this.length = length;
this.width = width;
}
//getter()、setter()
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
@Override
public void Perimeter() {
System.out.println("长方形的长:" + this.length
+ "长方形的宽:" + this.width
+ "长方形的周长:" + ((this.length*2) + (this.width*2)));
}
@Override
public void Area() {
System.out.println("长方形的长:" + this.length
+ "长方形的宽:" + this.width
+ "长方形的面积:" + (this.length*this.width));
}
}
Circle类
package Day06;
public class Circle implements Shape {
private double r; //圆的半径
//构造函数
public Circle(double r){
this.r = r;
}
//getter()、setter()
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
@Override
public void Perimeter() {
System.out.println("圆的半径:" + this.r
+ "圆的周长:" + 2*Math.PI*r
);
}
@Override
public void Area() {
System.out.println("圆的半径:" + this.r
+ "圆的面积:" + Math.PI*r*r
);
}
}
测试类
package Day06;
public class Test {
public static void main(String[] args) {
Shape[] shape = new Shape[2];
shape[0] = new Rect(3, 4);
shape[1] = new Circle(3);
for(int i=0; i<shape.length; i++){
shape[i].Perimeter();
shape[i].Area();
}
}
}
运行结果:
长方形的长:3长方形的宽:4长方形的周长:14
长方形的长:3长方形的宽:4长方形的面积:12
圆的半径:3.0圆的周长:18.84955592153876
圆的半径:3.0圆的面积:28.274333882308138