1、代码块是什么,分为哪几类,各自有什么特点?
答:
代码块是用{}括起来的代码
分为:静态代码块、局部代码块、构造代码块、同步代码块
局部代码块:在方法中出现,限定变量的生命周期,及早释放,提高内存的利用率
构造代码块:在类中方法外出现,多个构造方法中相同的的代码存放到一起,每次调用都执行,并
在构造方法前执行
静态代码块:在类中方法外出现,并加上static修饰,用于给类进行初始化,在加载的时候就执行,
并且只执行一次。一般用于加载驱动。
2、子父类都有静态代码块、构造代码块、构造方法,那么他们六者之间的执行流程是什么?
答:父类静态代码块——子类的静态代码块——父类构造方法块——父类构造方法
——子类构造代码块——子类的构造方法
3、继承的好处、弊端分别是什么?
答:
好处:提高了代码的复用性;提高了代码的维护性;使类与类之间产生了联系,是多态的前提
弊端:类的耦合性增强了,类与类之间的关系太紧密,一边添加属性,另一边也就多了一个,
有的时候是期望的,有的时候是不期望的
4、Java中继承的特点是什么?
答:
java只支持单继承,不支持多继承
java可以实现多层继承
5、Java中继承的注意事项是什么?我们什么时候使用继承?
答:
子类只能继承父类中非私有的成员(成员变量和成员方法)
子类不能继承父类中的构造方法,但是可以通过super关键字来访问父类构造方法
不要为了部分功能而去继承。
继承体现的关系是“is a”
6、this关键字和super关键字分别代表什么,以及他们各自的作用分别是什么?
答:
this:代表当前对象的引用
super:代表当前父类对象的引用
作用:
调用成员变量:
this:调用本类中的成员变量也可以调用父类中的成员变量
super:调用父类的成员变量
调用成员方法:
this:调用本类中的成员方法,也可以调用父类中的成员方法
super:调用父类中的成员方法
调用构造方法:
this:调用本类中的构造方法
super:调用父类中的构造方法
8、继承中构造方法的执行流程是什么?
答:
子类中所有的构造方法都会默认访问父类中的空参构造方法
9、为什么子类中所有的构造方法默认都会访问父类的空参构造?
假如父类没有无参构造方法,子类应该怎么办?
答:
因为子类会继承父类中的数据,可能还会使用父类中的数据,
所以子类在初始化前一定要先完成父类数据的初始化。
解决方法:
super解决:采用super()显式调用父类的构造方法
this解决:通过this调用本类的有参构造,然后在本类的有参构造里又调用了父类的有参构造,相当于
间接调用了父类的有参构造方法
10、super关键字和this关键字可以在构造方法中共存吗?
答:
不可以共存,因为super()和this()必须出现在构造方法的第一条语句上,所以只能存在一个
11、Overload和Override的区别是什么?方法重载能改变返回值类型吗?
答:
Ocerload:本类中出现的方法名相同,参数列表不同,与返回值类型无关
Override:子类中出现了和父类方法声明一模一样的方法,与返回值类型有关,是与父类返回值是一致的
方法重载能够改变返回值的类型
12、final关键字可以做什么,有什么特点?
答:
修饰类:类不能被继承
修饰变量:变量变成了常量,并且只能赋值一次
修饰方法:方法不能被重写(有时所有方法都很重要,不能被重写,需要用final修饰)
13、final修饰局部变量时,有什么特点?
答:
基本类型:其值不能改变
引用类型:其地址值不能改变,对象中的属性是可以改变的
14、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。
需求一:
项目经理类
属性:姓名 工号 工资 奖金
行为:工作work
程序员类
属性:姓名 工号 工资
行为:工作work
答:
package itheima008;
public class EmployeeDemo {
public static void main(String[] args) {
Programmer p=new Programmer();
p.setName("张三");
p.setId("IT-heima0041");
p.setSalary(20000);
System.out.println(p.getName()+"----"+p.getId()+"---"+p.getSalary());
p.work();
System.out.println("----------------------");
ProjectManager pm=new ProjectManager();
pm.setName("李四");
pm.setId("IT-heima0014");
pm.setSalary(50000);
System.out.println(pm.getName()+"-------"+pm.getId()+"----"+pm.getSalary());
pm.bound();
}
}
class Employee{
private String name;
private String id;
private double salary;
public Employee(){}
public Employee(String name,String id,double salary){
this.name=name;
this.id=id;
this.salary=salary;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setId(String id){
this.id=id;
}
public String getId(){
return id;
}
public void setSalary(double salary){
this.salary=salary;
}
public double getSalary(){
return salary;
}
}
class Programmer extends Employee{
public Programmer(){}
public Programmer(String name,String id,double salary){
super(name,id,salary);
}
public void work(){
System.out.println("写程序");
}
}
class ProjectManager extends Employee{
public ProjectManager(){}
public ProjectManager(String name,String id,double salary){
super(name,id,salary);
}
public void bound(){
System.out.println("发奖金");
}
}
需求二:
已知学生类和老师类如下:
属性:姓名,年龄
行为:吃饭
老师有特有的方法:讲课
学生有特有的方法:学习
答:
package itheima008;
public class PersonDemo {
public static void main(String[] args) {
Teacher t = new Teacher();
t.setName("刘国梁");
t.setAge(50);
System.out.println(t.getName() + "-----" + t.getAge());
t.eat();
t.teach();
Student s = new Student();
s.setName("张继科");
s.setAge(25);
System.out.println(s.getName() + "-----" + s.getAge());
s.eat();
s.study();
System.out.println("--------------------------");
}
}
class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
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 void eat() {
System.out.println("吃饭");
}
}
class Teacher extends Person {
public Teacher(){}
public Teacher(String name, int age) {
super(name, age);
}
public void teach() {
System.out.println("讲课");
}
}
class Student extends Person {
public Student(){}
public Student(String name,int age){
super(name,age);
}
public void study() {
System.out.println("学习");
}
}
需求三:
已知猫类和狗类:
属性:毛的颜色,腿的个数
行为:吃饭
猫特有行为:抓老鼠catchMouse
狗特有行为:看家lookHome
答:
package itheima008;
public class AnimalDemo2 {
public static void main(String[] args) {
Cat1 c = new Cat1();
c.setColor("黑色");
c.setLeg(4);
System.out.println(c.getColor() + "---" + c.getLeg());
c.eat();
c.catchMouse();
System.out.println("_-------------------------");
Dog1 d = new Dog1();
d.setColor("白色");
d.setLeg(4);
System.out.println(d.getColor() + "--------" + d.getLeg());
d.eat();
d.lookHome();
}
}
class Animal1 {
private String color;
private int leg;
public Animal1(String color, int leg) {
super();
this.color = color;
this.leg = leg;
}
public Animal1() {
super();
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public void eat() {
System.out.println("吃饭");
}
}
class Cat1 extends Animal1 {
public Cat1() {
super();
}
public Cat1(String color, int leg) {
super(color, leg);
}
public void eat() {
System.out.println("猫吃鱼");
}
public void catchMouse() {
System.out.println("猫捉老鼠");
}
}
class Dog1 extends Animal1{
public Dog1() {
super();
}
public Dog1(String color, int leg) {
super(color, leg);
}
public void eat() {
System.out.println("狗吃肉");
}
public void lookHome() {
System.out.println("狗看家");
}
}
|
|