java自动拆装箱,接口和抽象类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bubble1210/article/details/50719272

1.Java支持的数据类型有哪些?什么是自动拆装箱?

Java语言支持的8中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。


2.接口和抽象类的区别是什么?

Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。


3.接口是否可继承接口?接口类是否实现接口?接口类是否可继承实体类?

接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,但前提是实体类必须要有明确的构造函数


面试常考题

1.Java抽象类可以有构造函数吗?

抽象类虽然自身不可以实例化,但是其子类覆盖了所有的抽象方法后,是可以实例化的,所以抽象类的构造函数,适用于给其子类对象进行初始化的


2.Java抽象类可以实现接口吗?它们需要实现所有的方法吗?

可以,抽象类可以通过使用关键字implements来实现接口。因为它们是抽象的,所以它们不需要实现所有的方法,抽象类可以不实现接口的方法,由抽象类的子类实现


3.Java抽象类可以是final的吗?

不可以,Java抽象类不能是final的。final的不能被继承。


4.Java抽象类可以有static方法吗?

可以,抽象类可以声明并定义static方法。


5.可以创建抽象类的实例吗?

不可以,你不能创建Java抽象类的实例,它们是不完全的。即使你的抽象类不包含任何抽象方法,你也不能对它实例化。将类声明为abstract的,就等你你告诉编译器,它是不完全的不应该被实例化。当一段代码尝试实例化一个抽象类时Java编译器会抛错误。


6.抽象类必须有抽象方法吗?

抽象类可以没有抽象方法,但有抽象方法的必须是抽象类。


7.Java抽象类和接口有何不同?

Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。


8.何时选用抽象类而不是接口?

1.写一个形状接口Shape  有两个方法一个求周长,一个求面积    2. 写一个长方形类Rect继承于形状类  增加属性长和宽  分别去覆盖求周长和求面积的方法    3.写一个圆形类Circle  增加属性半径  分别去覆盖求周长和求面积的方法  写一个测试类,在测试类中分别创建不同的对象放入进一个Shape  数组中进行,循环数组中的元素求周长和面积 

<span style="font-family:SimSun;">package method;
interface Shape{
	public abstract void Per();
	public abstract void Area();	
}
class Rect implements Shape{
	private double length;	
	public double getLength() {
		return length;
	}
	public void setLength(double length) {
		this.length = length;
	}
	public double getWide() {
		return wide;
	}
	public void setWide(double wide) {
		this.wide = wide;
	}
	private double wide;
	public void Per(){
		System.out.println("长方形长:"+this.length+"长方形宽:"+this.wide+"周长:"+(2*(this.length+this.wide)) );
	}	
	public void Area() {
		System.out.println("长方形长:"+this.length+"长方形宽:"+this.wide+"面积:"+(this.length*this.wide) );		
	}
	public Rect(double length, double wide) {
		setLength(length);
		setWide(wide);
	}
}

class Circle implements Shape{
	private double radius;
	public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}

	public void Per() {
		System.out.println("圆半径:"+this.radius+"圆面积:"+(Math.PI*this.radius*this.radius) );
		
	}

	public void Area() {
		System.out.println("圆半径:"+this.radius+"圆周长:"+(Math.PI*this.radius*2) );
		
	}
	public Circle(double radius){
		setRadius(radius);
	}
	
}
public class demo6 {

	public static void main(String[] args) {
		Shape[] Shape=new Shape[2];
		Rect a=new Rect(5,10);
		Circle b=new Circle(5);
		Shape[0]=a;
		Shape[1]=b;
  for(int i=0;i<2;i++){
	  Shape[i].Per();   Shape[i].Area();
  }

	}

}
</span>


猜你喜欢

转载自blog.csdn.net/Bubble1210/article/details/50719272