类、包、接口【总结】

1. 使用抽象和封装有哪些好处?

答:抽象可以提供事物的本质特征。封装把代码和和其操作的数据捆绑在一起,防止外部对数据和代码的干扰和滥用


2. 什么是最终类,如何定义最终类?

答:最终类指被final修饰符修饰和定义的类,最终类不能被继承,即没有子类。如java中的String就是最终类。


3. 如何定义静态域,其有何特点,如何访问?

对域使用static修饰。最本质特点是他们是类的域,不属于任何一个类的具体对象实例。它不保存在某一个对象实例的内存区间,而是在类的内存区域的公共存储单元。静态域(类变量)可以通过类名直接访问,也可以通过实例对象来访问。


4. 什么是静态初始化器,有何特点?与构造方法有何不同?

答:静态初始化器是由关键字static引导的一对大括号{}括起来的语句组。它的作用和类的构造方法类似,都是用来完成初始化工作,但静态初始化器在三点上与构造方法不同:

* 构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身初始化。

* 构造方法是在用new运算符产生新对象时有系统自动执行,而静态初始化器一般不由程序来调用,而是在所属的类加载入内存时由系统调用执行。

* 与构造方法不同,静态初始化器不是方法,没有方法名、返回值和参数列表。

* 同static方法一样,静态初始化器不能访问实例域和实例方法。


5. 什么是抽象方法,有何特点?如何定义和使用?

答:被abstract修饰符修饰的方法,抽象方法为所有子类定义一个统一的接口。对抽象方法只需声明,不需实现,即用分号;而不用{},格式如下:

abstract returnType abstractMethod([paramlist]);


6. 如何定义静态方法,其有何特点?静态方法处理的域有何要求?

答:用static修饰符修饰的方法属于类的静态方法,又称类方法。与此相对,不用static修饰的方法,则为实例方法。类方法的本质是该方法是属于整个类的,不是属于实例的。静态方法中,不能访问实例变量。在类方法中不能使用this和super。


7. 什么是访问控制符?有哪些访问控制符?哪些可以用来修饰类,哪些用来修饰域和方法?

答:访问控制符是指public/private/protected等表示访问控制(Access Control)的修饰符,其作用是更好地控制类及其域、方法的存取权限,更好地实现信息的封装与隐藏。

类 的访问控制符或者为public,或者默认,若类用public修饰,则该类可以被其它类访问;若类默认访问控制符,则该类只能被同包中的类访问。

类的域和方法 的访问控制符有private/protected/public和默认。


8. 修饰符是否可以混合使用?

答:修饰符可以混合使用,如public static。但需要注意一些规则,如final及abstract不能并列修饰同一类。


9. 什么是继承,其特性给面向对象编程带来什么好处?什么是单重、多重继承?

答:继承(Inheritance)是一个对象获得的另一个对象的属性的过程。它的重要性源于它支持按层次分类概念。这与现实世界是一致的,大多数知识因为层次化分类而变得容易掌握。一个类只有一个直接父亲称为单继承,有多个直接父亲称为多重继承。


10. 子类的域和方法的数目是否一定大于等于父类的域和方法的数目?

答:不是。考虑到子类可以继承父类的方法,但不能继承私有的方法。


11. 什么是域的隐藏?

答:在子类中定义与父类同名的域,称为域的隐藏。


12. 什么是方法的覆盖?与方法的重载有何不同?

答:子类重新定义与父类同名的方法,称为方法的覆盖。子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明(方法名、返回值、参数类型列表)。方法的重载时指定义几个同名得方法,但它们的参数类型列表不同。


13. thissuper的作用?

答: this表示这个对象本身。详细地说,在普通方法中,this表示调用这个方法的对象;在构造方法中,this表示所新创建的对象。


14. 父类对象和子类对象相互转化的条件是什么?如何实现转换?

答: 类似于基本数据类型数据之间的强制类型转换,存在继承关系的父类对象和子类对象之间也可以在一定条件下相互转换。父类对象和子类对象的转化需要注意如下原则:

* 子类对象可以被视为是其父类的一个对象。如一个Student对象也是一个Person对象。

* 父亲对象不能被当作是其某一个子类的对象。

* 如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。

* 如果父类对象引用指向的实际是一个子类对象,那么这个子类对象的引用可以用强制类型转化成子类对象的引用。


15. 什么是包,作用是什么?如何创建包,什么情况下需要在程序里创建包?

答:包是一种松散的类的集合,包的作用在于提供了一种命名机制和可见性限制机制。package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包。它的格式为: package pkg1[.pkg2[.pkg3...]]; 由于Java编译器为每个类生成一个字节码文件,且文件名与public的类名相同,因此同名得类有可能发生冲突,这时就需要创建包。


16. CLASSPATH是有关什么的环境变量,它如何影响程序的运行,如何设置和修改这个环境变量?

答:在编译和运行程序中,经常用到多个包,怎样指明这些包的根目录呢?简单地说,包层次的根目录是由环境变量CLASSPATH来确定的。具体操作有两种方法:

一是在java及javac命令行中,用 -classpath选项来指明,如:

java -classpath d:\tang\ch04;c:\java\class;. pk.TestPkg

二是设定classpath环境变量,用命令行设定环境,如

Set classpath=d:\tang\ch04;c:\java\class;.

在Windows中还可以在环境变量里设定。


17. 什么是接口,为什么要定义接口,接口和类有何异同?

答:Java中的接口(Interface)在语法上有些类似于类(class),它定义了若干个抽象方法和常量,形成一个属性集合,该属性集合通常对应了某一组功能,其主要作用是可以帮助类的多重继承的功能。接口中只能有方法名和常数名,不能像类那样有方法的实现体。定义接口使用关键字interface。

18. equals()方法与==运算符的区别?

答:equals()方法用来比较两个对象是否相同,相同则返回true,否则返回false。如果equals()方法没有被覆盖,那么这种“相等”是指两个引用相等,其结果与==运算符的结果相同。

例如字符串相等如下:

public class TestEquals {

	public static void main(String[] args) {
		String name1=new String("lisa");
		String name2=new String("lisa");
		System.out.println(name1==name2);
								//两个对象的引用,不相等
		System.out.println(name1.equals(name2));
								//内容,相等
		String name3="lisa";
		String name4="lisa";
		System.out.println(name3==name4);
								//相同常量的引用,相等
		System.out.println(name3.equals(name4));
								//内容,相等
	}
}
结果:

false
true
true
true


19. 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值