、多态是什么,多态的前提条件是什么?
答:
多态是事物存在的多种形态
a.要有继承关系
b.要有方法继承
c.要有父类引用指向子类对象
2、多态中成员访问的特点分别是什么?
成员变量
答:
编译看左边,运行看左边
成员方法(非静态方法)
编译看左边,运行看右边
静态方法
编译看左边,运行看左边
3、多态的好处和弊端分别是什么?
答:
好处:
提高了代码的维护性和扩展性
弊端:
不能使用子类特有的属性和行为
4、什么是向上转型,什么是向下转型?
答:
eg:Person p=new Superman();向上转型
Superman sm=(Superman)p;向下转型
5、什么是抽象类,它的特点是什么?
答:
抽象类就是看不懂的、不具体的类
a.抽象类和抽象方法必须用abstract关键字修饰
b.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口
c.抽象类的子类
1、是抽象类
2、重写抽象类中所有抽象方法(推荐方案)
6、抽象类的成员特点有哪些?
答:
a.成员方法:可以是抽象方法,也可以是非抽象方法
b.成员变量:既可以是变量,也可以是常量,不能用abstract关键字
c.构造方法:有,用于初始化父类的数据,不能使用abstract关键字
7、抽象类的面试题:
A、一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
答:
可以,这样做的目的只有一个就是不让其他类创建子类对象,交给子类完成
B、abstract不能和哪些关键字共存,为什么?
答:
不能和static、final、private关键字共存
abstract与static:
abstract修饰的方法没有方法体,static修饰的方法可以用类名.方法直接调用
abstract与final:
abstract修饰的方法强制子类进行方法重写
final修饰的方法不能被重写
abstract与private:
abstract修饰是为了让子类看到,并重写
private修饰只能在本类中访问,不让子类访问
8、什么是接口,它的特点是什么?
答:
狭义讲就是java中的interface,广义讲对外提供规则的都是接口
特点:
a.接口用关键字interface表示 interface Inter{}
b.类实现用implements表示 class Demo implements Inter{}
c.接口不能实例化,必须通过多态的方式才能实现
d.接口的子类可以是抽象类,但是意义不大;可以是具体类,但是必须重写接口中所有的抽象方法
9、接口的成员特点有哪些?
答:
成员变量:只能是常量并且是静态并公开的 public static final...
构造方法:接口没有构造方法
成员方法:只能是抽象方法
默认修饰符:abstract
建议自动给出
10、抽象类和接口的区别是什么?
答:
抽象类:
成员变量:可以是常量也可以是变量
构造方法:有
成员方法:可以是抽象,也可以是非抽象
接口:
成员变量:只能是常量
构造方法:没有
成员方法:必须是抽象的
11、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。
需求一:
具体事物:基础班老师,就业班老师
共性:姓名,年龄,讲课。
特性:
基础班老师讲JavaSE
就业班老师讲Android
答:
package test;
/*需求一:
具体事物:基础班老师,就业班老师
共性:姓名,年龄,讲课。
特性:
基础班老师讲JavaSE
就业班老师讲Android*/
public class TeacherDemo {
public static void main(String[] args) {
BaseTeacher bt = new BaseTeacher("张三", 23);
System.out.println(bt.getName() + "-----" + bt.getAge());
bt.teach();
WorkTeacher wt = new WorkTeacher("李四", 24);
System.out.println(wt.getName() + "-------" + wt.getAge());
wt.teach();
}
}
abstract class Teacher {
private String name;
private int age;
public Teacher() {
}
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public abstract void teach();
}
class BaseTeacher extends Teacher {
public BaseTeacher() {
}
public BaseTeacher(String name, int age) {
super(name, age);
}
public void teach() {
System.out.println("讲JavaSE");
}
}
class WorkTeacher extends Teacher {
public WorkTeacher() {
}
public WorkTeacher(String name, int age) {
super(name, age);
}
public void teach() {
System.out.println("讲Android");
}
}
|
|