面向对象--封装和多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象--封装和多态相关的知识,希望对你有一定的参考价值。

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();
}

以上是关于面向对象--封装和多态的主要内容,如果未能解决你的问题,请参考以下文章

JS面向对象三大特征:封装、继承、多态

举例说明java面向对象的封装继承多态

面向对象的多态详解 !!

0面向对象三大机制 封装继承多态

0面向对象三大机制 封装继承多态

Python 面向对象(创建类和对象,面向对象的三大特性是指:封装继承和多态,多态性)