1:final关键字可以干什么?有什么特点?
作用:
它可以修饰类,那么该类不能继承
它可以修饰成员方法,成员方法不能被重写
它可以修饰变量,此时这个变量是一个常量
特点:
final:表示最终,终态(不能被更改的)
2:final关键字的面试题?
final,finally,finalize的区别?
final:一般在继承中用到,定义一些常量;
finally:在数据库里释放资源;
finalize:垃圾回收方法;
3:多态是什么,前提是什么?
多态:在同一个时刻,体现出来的不同状态;
多态的前提:
1)必须有继承关系
子类继承父类,存在一些特点
2)必须有方法重写
子类继承父类,方法重写的目的,举例:动物吃的方法,每一个具体动物吃的东西不一样,所有必须要方法覆盖
3)就是必须有父类的引用指向子类对象 (向上转型)
父类名 fu = new 子类名() ;
多态的前提:
1)必须有继承关系
子类继承父类,存在一些特点
2)必须有方法重写
子类继承父类,方法重写的目的,举例:动物吃的方法,每一个具体动物吃的东西不一样,所有必须要方法覆盖
3)就是必须有父类的引用指向子类对象 (向上转型)
父类名 fu = new 子类名() ;
4:多态中成员访问的特点?
1)成员变量: 编译看左,运行看左...
2)成员方法(非静态): 编译看左,运行看右(存在方法重写)
3)构造方法:构造方法(无论子类,还是父类),都是对对象进行初始化
4)静态成员方法: 编译看左,运行看左(静态跟类有关系,算不上方法重写)
2)成员方法(非静态): 编译看左,运行看右(存在方法重写)
3)构造方法:构造方法(无论子类,还是父类),都是对对象进行初始化
4)静态成员方法: 编译看左,运行看左(静态跟类有关系,算不上方法重写)
5:多态的好处及弊端?如何解决多态的弊端?
多态的好处:
可以提供代码的复用性:继承保证
可以提高的代码的扩展性:由多态保证... (父类的引用指向子类对象)
多态的弊端:
父类引用指向子类对象,
通过父类的引用调用子类特有功能,不能调用....
可以提供代码的复用性:继承保证
可以提高的代码的扩展性:由多态保证... (父类的引用指向子类对象)
多态的弊端:
父类引用指向子类对象,
通过父类的引用调用子类特有功能,不能调用....
解决方案:
向下转型
向下转型
6:什么是向上转型?什么是向下转型?
向上转型:父类的引用指向子类对象
向下转型:将父类的引用强制转换子类的引用
向下转型:将父类的引用强制转换子类的引用
7:抽象类概述及其特点?
抽象类的概念:
针对一个事物,比如:动物类---->总体概括,之前定一个具体的动物(---->必须给他的某个功能只是声明即可),只有,猫或者狗等等这些才是具体事物
Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类
关键字:abstract 抽象的意思
抽象类的特点:抽象类不能直接实例化!(不能创建对象)
针对一个事物,比如:动物类---->总体概括,之前定一个具体的动物(---->必须给他的某个功能只是声明即可),只有,猫或者狗等等这些才是具体事物
Java中,如果一个类中有一个方法声明(抽象方法)抽象功能,那么这个类定义为抽象类
关键字:abstract 抽象的意思
抽象类的特点:抽象类不能直接实例化!(不能创建对象)
8:抽象类成员特点?
成员变量:可以是变量,也是一个常量
构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
成员方法:可以有抽象方法,还可以有非抽象方法...
构造方法:可以有无参,可以有有参,作用:给对象进行初始化的.
成员方法:可以有抽象方法,还可以有非抽象方法...
9:抽象类的小问题
A:一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
可以
B:abstract不能和哪些关键字共存
abstract 和private
abstract 和final
abstract和static
abstract 和final
abstract和static
10:接口的概述及其特点?
接口:体现的是事务的扩展性功能(额外动作,后天经过学习等等)
接口的特点:不能实例化
接口的特点:不能实例化
11:接口的成员特点?
成员变量:是一个常量,不能更改,并且默认的修饰符
public static final:
构造方法:接口不存在构造方法
成员方法:都是抽象方法
默认的修饰符:public abstract
public static final:
构造方法:接口不存在构造方法
成员方法:都是抽象方法
默认的修饰符:public abstract
12:抽象类和接口的区别?
A) 成员的区别 成员变量: 抽象类:既可以常量,也可以是变量 接口:只能是常量,默认的修饰符:public static final 构造方法: 抽象类:有构造方法,无参/有参 (给对象进行初始化的) 接口:没有构造方法 成员方法: 抽象类:可以有抽象方法,也可以有非抽象方法 接口:只能是抽象方法 :默认的修饰符:public abstract B)类与类/类与接口关系的区别 类与类之间的关系: 继承关系,只支持单继承,不支持多继承,但是可以多层继承 类与接口的关系: 实现关系,一个类继承另一个类的同时,还可以实现多个接口... 接口与接口的关系: 是一种继承关系,既可以单继承,也可以多继承... 接口1 extends 接口2,接口3... C)设计原则的 区别 1)抽象类: 是有继承关系---->体现的是一种"is a"的关系 (A是B的一种或者B是A的一种) 2)接口:类和接口:实现关系--->体现的是一种" like a"的关系(扩展功能) :跳高猫 像猫
13:编程题:
老师和学生案例,加入抽烟的额外功能 (自己给定成员,测试即可!)
package homework; //抽象类 public abstract class Person { private String name ; private int age ; public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public abstract void work() ; }
package homework; //接口 public interface Somking { public abstract void Somking() ; }
package homework; //学生类,额外动作:抽烟 public class Student extends Person implements Somking{ public Student() { super(); } public Student(String name, int age) { super(name, age); } @Override public void work() { System.out.println("学生们写Java作业..."); } @Override public void Somking() { System.out.println("学生抽烟..."); } }
package homework; //老师类 public class Teacher extends Person{ public Teacher() { super(); } public Teacher(String name, int age) { super(name, age); } public void work() { System.out.println("老师们教Java..."); } }
package homework; // 老师和学生案例,加入抽烟的额外功能 (自己给定成员,测试即可!) public class Test { public static void main(String[] args) { Student s = new Student("张 三",22); System.out.println(s.getName()+"---"+s.getAge()); s.work(); s.Somking(); Teacher t = new Teacher("张老师",30); System.out.println(t.getName()+"---"+t.getAge()); t.work(); } }
14: 代码块是什么?代码块的分类和各自特点?
关于代码块的概述:
用{}括起来的代码,统称为代码块;
根据其位置以及声明不同:分为以下:
局部代码块: 在main()里面,给变量限定它的生命周期
构造代码块:在一个类中的成员位置中,用{}括起来,
作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化. 在每次执行构造方法之前,先
执行构造代码块.
静态代码块:在一个类的成员位置,也是用{}包起来,但是他被static修饰
作用:一般情况 它的作用给类进行初始化
15 静态代码块,构造代码块,构造方法的执行流程?
静态代码块>构造代码块>构造方法
16:继承的好处
1)提供了代码复用性,解决了代码的臃肿
2)它是多态的前提(多态的前提是必须有继承关系)
2)它是多态的前提(多态的前提是必须有继承关系)
17:Java中继承的特点
1)子类继承父类,是继承了父类所有的东西(成员变量,成员方法,包括私有),但是子类不能使用私有的东西,只能通过父类的公共的访问间接的让子类访问它.
2)在Java中,继承只支持单继承,不支持多继承(子类名 extends 父类名1,父类名2,...)。但是,Java是可以支持多层继承...
2)在Java中,继承只支持单继承,不支持多继承(子类名 extends 父类名1,父类名2,...)。但是,Java是可以支持多层继承...
18:Java中继承的注意事项?以及我们什么时候使用继承?
注意事项:
1)构造方法不能被继承,但是通过super关键字去访问
2)私有的可以间接的去访问
3)什么时候使用extends
2)私有的可以间接的去访问
3)什么时候使用extends
继承体现的是一种"is a"的关系:如果A是B的一种或者B是A的一种,这个可以使用继承!
19:面试题:
方法重写和方法重载的区别?
Overload
Override
Overload:方法名一样,参数不同,和返回值没有关系
参数不同:
1)参数个数不同
2)参数类型不同
Override:方法重写 (子类定义一个和父类一摸一样的方法声明)
继续中使用到的
参数不同:
1)参数个数不同
2)参数类型不同
Override:方法重写 (子类定义一个和父类一摸一样的方法声明)
继续中使用到的
20 下列有关类、对象和实例的叙述,正确的是哪一项?(d )
A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别
B.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称
C.类是对象的抽象,对象是类的具体化,实例是类的另一个名称
D.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称
A.类就是对象,对象就是类,实例是对象的另一个名称,三者没有差别
B.对象是类的抽象,类是对象的具体化,实例是对象的另一个名称
C.类是对象的抽象,对象是类的具体化,实例是类的另一个名称
D.类是对象的抽象,对象是类的具体化,实例是对象的另一个名称
21 下列有关抽象类的叙述正确的是哪项?(c)
A.抽象类中一定含有抽象方法
B.抽象类既能被实例化也能被继承
C.抽象类的声明必须包含abstract关键字
D.抽象类中不能有构造方法
A.抽象类中一定含有抽象方法
B.抽象类既能被实例化也能被继承
C.抽象类的声明必须包含abstract关键字
D.抽象类中不能有构造方法
22 下列有关接口的叙述错误的是哪项?(d)
A.接口中只能包含抽象方法和常量
B.一个类可以实现多个接口
C.类实现接口时必须实现其中的方法
D.接口不能被继承
A.接口中只能包含抽象方法和常量
B.一个类可以实现多个接口
C.类实现接口时必须实现其中的方法
D.接口不能被继承
23 下列关于类的继承的描述,正确的有( b )
A. 一个类可以同时继承多个父类
B. 一个类可以具有多个子类
C. 子类会自动拥有父类所有的方法
D. 一个类继承另一个类需要使用 extends 关键字
A. 一个类可以同时继承多个父类
B. 一个类可以具有多个子类
C. 子类会自动拥有父类所有的方法
D. 一个类继承另一个类需要使用 extends 关键字
24 下列关于构造函数的说法正确的是(b )
A. 方法名必须与类名相同
B. 使用new关键字创建对象时,java虚拟机会自动调用构造函数
C. 我们在定义一个类时,必须要声明至少一个构造函数
D. 构造函数中不能使用return语句(这个是错的,可以rutrun;)
A. 方法名必须与类名相同
B. 使用new关键字创建对象时,java虚拟机会自动调用构造函数
C. 我们在定义一个类时,必须要声明至少一个构造函数
D. 构造函数中不能使用return语句(这个是错的,可以rutrun;)
25. 关于继承, 以下说法正确的是: (a)
A.Java中只支持单继承, 一个类只能继承一个类, 但是可以有多个子类
B.一个类如果没有自己写无参构造方法, 那么子类将无法继承
C.子类可以当父类用, 父类不可以当子类用
D. 子类重写父类方法时访问权限不能更低
A.Java中只支持单继承, 一个类只能继承一个类, 但是可以有多个子类
B.一个类如果没有自己写无参构造方法, 那么子类将无法继承
C.子类可以当父类用, 父类不可以当子类用
D. 子类重写父类方法时访问权限不能更低
26 运行以下的main()方法,结果是?(a )
1 public static void main(String[] args)
2 {
3 String myString;
4 int x = 100;
5
6 if (x < 100) myString = "x is less than 100";
7 if (x > 100) myString = "x is greater than 100";
8 System.out.println(myString.length());
9 }
A. 编译时报出错误提示信息“变量myString没有被初始化”
B. 编译通过
C. 编译未能通过。但如果变量myString在第8行前的代码中被初始化,代码可以编译通过,运行时可以输出字符串myString的长度
D. 以上都不对
1 public static void main(String[] args)
2 {
3 String myString;
4 int x = 100;
5
6 if (x < 100) myString = "x is less than 100";
7 if (x > 100) myString = "x is greater than 100";
8 System.out.println(myString.length());
9 }
A. 编译时报出错误提示信息“变量myString没有被初始化”
B. 编译通过
C. 编译未能通过。但如果变量myString在第8行前的代码中被初始化,代码可以编译通过,运行时可以输出字符串myString的长度
D. 以上都不对