javaSE面试题内部类,接口,抽象类
2017-10-25 21:23
176 查看
(1)
package org.westos_内部类;
/**
*
* 看程序
* 面试题:
要求请填空分别输出30,20,10。
* */
class Outer7 {
public int num = 10;
}
public class InnerClassTest {
public static void main(String[] args) {
Outer7.Inner7 oi = new Outer7().new Inner7();
oi.show();
}
}
答案:
System.out.println(num);
System.out.println(this.num);
System.out.println(new Outer7().num);//要访问外部类的成员变量:匿名对象 :new 外部类名().成员变量
//外部类的this限定
System.out.println(Outer7.this.num);
(2)
/**
* 匿名内部类面试题:
按照要求,补齐代码
interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
* */
答案:
//当前method()能直接被类名调用—->method()方法是一个静态方法 static
//Outer8.method().show()—->Outer8.method()返回的是一个对象,拿对象调用show()方法
//由于接口只有一个show()方法,最终要去重写show()方法
//补齐代码
public static Inter2 method(){ //返回值是一个接口
* 必须把变量变成一个常量,(需要用final:自定义常量),这样的一个变量的值永远是固定的!
*
(4)接口和抽象类的区别?
6:this和super的区别?
它们代表的意思不一样:
this:代表当前类的对象,表示当前对象的引用
super:代表的父类的存储的空间标识(理解为代表父类的引用/对象)
package org.westos_内部类;
/**
*
* 看程序
* 面试题:
要求请填空分别输出30,20,10。
外部类和内部类没有继承关系!
* */
class Outer7 {
public int num = 10;
class Inner7 { public int num = 20; public void show() { int num = 30; //补齐代码 } }
}
public class InnerClassTest {
public static void main(String[] args) {
Outer7.Inner7 oi = new Outer7().new Inner7();
oi.show();
}
}
答案:
System.out.println(num);
System.out.println(this.num);
System.out.println(new Outer7().num);//要访问外部类的成员变量:匿名对象 :new 外部类名().成员变量
//外部类的this限定
System.out.println(Outer7.this.num);
(2)
/**
* 匿名内部类面试题:
按照要求,补齐代码
interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
* */
答案:
//当前method()能直接被类名调用—->method()方法是一个静态方法 static
//Outer8.method().show()—->Outer8.method()返回的是一个对象,拿对象调用show()方法
//由于接口只有一个show()方法,最终要去重写show()方法
//补齐代码
public static Inter2 method(){ //返回值是一个接口
return new Inter2(){ @Override public void show() { System.out.println("helloworld"); } } ; } (3) 局部内部类访问局部变量会出现问题? 当前局部变量报错,必须用final修饰;为什么用final修饰? 答案:是由于局部变量是随着方法调用而生成的,随着方法的调用完毕消失,而现在局部*位置有一个局部内部类它要在自己的成员方法位置访问当前的局部变量
* 必须把变量变成一个常量,(需要用final:自定义常量),这样的一个变量的值永远是固定的!
*
(4)接口和抽象类的区别?
1)成员的区别: 成员变量: 抽象类:成员变量可以是常量,也可以是变量 接口:成员变量只能是一常量:存在默认修饰符:public static final(无法被继承。只能通过接口名访问。) 构造方法: 抽象类:可以有无参构造,有参构造方法 作用:通过子类进行数据初始化(通过子类创建对象) 接口:没有构造方法的 成员方法的区别: 抽象类:可以有抽象方法,也可以有非抽象方法 接口:只能是抽象方法:存在默认修饰符:public abstract 2)关系的区别: 类与类的关系: 继承关系:extends,java中只支持单继承,不支持多继承,但是可以多层继承! 类与接口的关系: 实现关系:implements,并且,一个类在继承另一个类的同时,可以实现多个接口 (class 子实现类名 enxtends Object implements 接口名1,接口名2...) 接口与接口的关系 继承关系:extends,可以支持单继承,也可以多继承! 3)设计理念的区别: 抽象类: 体现的是一种"is a"的关系,存在继承关系!(抽象类多态) 接口: 体现的是一种"like a"的关系,由于接口的一种扩展功能5:overload和override的区别: overload:方法重载: 在同一个类中, 方法名相同,参数列表不同,与返回值没有关系 参数列表不同: 1)参数个数 2)参数的数据类型 override:方法重写,只能继承关系中的,子类继承父类的时候,出现了和父类一模一样的方法声明
6:this和super的区别?
它们代表的意思不一样:
this:代表当前类的对象,表示当前对象的引用
super:代表的父类的存储的空间标识(理解为代表父类的引用/对象)
应用场景: 访问成员变量 this.成员变量; super.成员方法; 访问构造方法 this() ;访问本类无参 super();访问父类无参构造 访问成员方法: this.成员方法(); super.成员方法() ;