首页 > 代码库 > 面向对象--封装和多态
面向对象--封装和多态
1、访问修饰符有哪些?各自的作用范围是什么?
public 同一类中;同一包中的其他类;不同包中子类;该类及非该类都可访问。
protected 同一类中;同一包中的其他类;不同包中子类。
private 同一类中。
什么也不写,默认的同一类中,同一包中其他类。
2、什么是封装?封装有什么特点?
封装;按照信息隐藏原则,将数据组织在一起。
封装两个特点:信息的隐藏和信息的集合。
3、私有属性(private)加get、set方法和公有属性有什么区别?
加get/set对属性进行访问和设置,可以通过去掉get/set方法,将属性做成只读和只写属性。公有属性
做不到,也可以对赋值的属性进行合法性的验证,从而保证了属性值的合法性,公有属性做不到。
4、静态块在什么时候执行?执行几次?
静态块在类加载时执行,只执行一次,执行在对象产生之前,一般用于初始化静态变量和静态方法。
5、什么是内部类?内部类产生的class文件命名规则是怎样的?
在一个类中,再定义一个类就称为内部类,内部类相当于外部属性,内部类对象的创建,必须外部类
的对象。命名规范:外部类名$内部类名。
6、子类重写父类方法有什么限制?
f
方法重写只能发生在父子之间,子类的方法名和父类相同,参数列表相同,返回类型相同。
方法的修饰符必须大于或等于父类的方法。
7、什么是多态?多态主要的应用是什么?instanceof作用是什么?
允许一个父类变量引用子类的对象,允许一个接口类型变量引用
8、什么是抽象方法?什么是抽象类?
如果一个类只有定义没有具体的方法,那么久是抽象方法,用abstact
拥有抽象方法的类叫做抽象类,如果一个类继承抽象类,那么必须重新抽象类中所以抽象方法。
9、说代码执行结果
class Father{
public Father(){
System.out.println("father");
}
}
class Child extends Father{
static{
System.out.println("static");
}
public Child(){
System.out.println("child");
}
}
class Test{
public static void main(String [] args){
Child c = new Child();
Child d = new Child();
}
}
static
father
child
father
child
10、class Super{
protected float getNum(){return 3.0f;}
}
public class Sub extends Super{
//Here
}
下面哪些代码可放在Here处c d e
a) float getNum(){return 4.0f;} //子类重写父类的方法,子类访问修饰符大于等于父类
b) public void getNum(){} //返回类型不同,不满足重写条件,不满足重载,编译错误
c) private void getNum(double d){} //重载方法
d) public double Getnum(){return 4.0d;} //不同的方法
e) public float getNum(){return 9;} //重写方法
11、有一个文件S.java。
public class S {
}
class A{
public class B{
}
}
当编译S.java时,会产生几个class文件,分别是什么?3个 s.class / b.class/ A$b.class
12、有这样两个类
class A{
public void getX(int x){
System.out.println("aaa");
}
}
class B extends A{
public void getX(int x,int y){
System.out.println("bbb");
}
}
class Test{
public static void main(String[] args){
B b = new B();
b.getX(1);
}
}
当执行Test时,输出什么结果。aaa
13、JAVA代码查错
a、
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}//抽象方法必须已分号结束,不能加{},无论{}是否有
内容,都是具体方法。
}
b、 abstract class Something {
private abstract String doSomething ();//抽象方法不能申明为private和static(私有的,静态的)
}
c、public class Father{
public Father(int x){
}
}
class Child extends Father{//子类构建之前,必须通过super(),产生父类的对象,如果父类没有提供无参构造方法,必须显示调用。
public Child(){
}
}
d、public class Father{
public void test(){
}
}
class Child extends Father{
public void speak(){
}
}
class Test{
public static void main(String[] args){//多态调用时,只能调用父类中定义的属性和方法,不能调用子类的属性和方法。
Father f = new Child();
f.speak();
}
面向对象--封装和多态