1、第二阶段面向对象扩展加强训练习题面向对象加强补充扩展作业理论题1. 局部变量和成员变量的区别:A、 在位置上:成员变量:在类中方法外; 局部变量:在方法中或者方法声明上B、 在内存中:成员变量:在堆内存中局部变量:在栈内存中C、 生命周期:成员变量:随着对象的创建而存在,随着对象的消失而消失;局部变量:随着方法的调用而存在,随着方法的调出完毕而消失D、 默认初始化值:成员变量:有默认的初始化值;局部变量:没有初始化值,必须赋值之后才能使用2.变量的使用顺序?3.类和对象的关系? 1、类是一组相关属性和行为的集合 2、对象是该类事物的个体体现; 3、类是抽象的具体的或者是类是一般的,对象是特殊的
2、 4、类中可以包含成员变量、类变量、成员方法、类方法、构造函数、构造代码块儿、静态代码块 4.java描述事物最基本的单位? 类5.什么叫面向对象? 强调的对象,不断的创建对象,使用对象,强调对象的方法做事情;6.什么是封装?封装的原则?好处?封装是隐藏属性和其实现细节,只提供对外公共访问方式;隐藏属性和实现细节,只提供对外公共访问方式好处:1、提高代码的复用性;2、提高代码的维护性;7.封装就是私有,对吗?为什么? 不对,私有只是封装的一种,8. Java中参数传递的问题:传递基本数据类型和引用数据类型区别?9. 构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什么区别?10. s
3、tatic关键字的特点?注意事项是什么?有什么好处和弊端? 特点:1、 随着类的加载而加载,加载到方法区下;2、 优先于对象存在;3、 被所有对象共享;4、 静态的成员变量或者成员方法都是可以通过类名来调用,也可以使用对象名来调用,但是推荐使用类名来调用,在开发中,通常都是以类名来调用;注意事项:静态修饰成员,类成员,静态成员变量又称为类变量;11.类变量和实例变量的区别? 静态变量属于类,所以也称为类变量 成员变量属于对象,所以也称为实例变量(对象变量)12. 构造方法能不能重载? 可以,既然是方法,就可以重载13.静态代码块和构造代码块的区别? 静态代码块:随着类的加载而执行,而且只执行一
4、次 构造代码块:每次执行构造方法之前执行14.什么是继承? 让类和类之间产生了关系,子父类关系 15.继承的的特点和好处,弊端? 好处:1、 提高代码的复用性;2、 提高了代码的维护性;3、 让类与类之间产生了关系,是多态的前提;弊端:让类与类之间的依赖性增强了,也就是耦合性增强了开发的原则:高内聚,低耦合;16.this和super 的区别? 1、调用成员变量 This.成员变量 调用本类的成员变量,也可以调用父类的成员变量 Super.成员变量 调用父类的成员变量2、 调用构造方法This()调用本类的构造方法Super()调用父类的构造方法3、 调用成员方法This.成员方法,调用本类的
5、成员方法,也可以调用父类的成员方法;Super.成员方法,调用父类的成员方法17Super()和this()在构造方法能同时使用吗? Super()或者this()必须出现在构造方法的第一条语句上,只能出现其一18.Super关键字和this关键字能否在构造函数中共存? 19.为什么每个构造函数中第一行都有默认的super()?20.为什么默认的super()都是空参的呢?21.构造方法的特点? 1、构造方法主要作用是给对象的属性进行初始化; 2、方法名与类名完全一致,没有返回值类型,连void都没有 3、构造方法也是方法,只是比较特殊,是在创建对象后马上调用,后期不能单独调用,既然是方法,就
6、可以重载;22.this的作用? 代表当前对象的引用23.子父类都有静态代码块,构造代码块,构造方法的执行顺序? 父类静态代码块、子类静态代码块、父类构造代码块、构造方法、子类构造代码块、子类构造方法24. final修饰的变量的初始化时机: 1、未被static关键字修饰:可以显示初始化,可以在构造方法中初始化 2、被static修饰,可以显示初始化,可以在静态代码块中初始化,不能在构造方法中初始化;25. final如果修饰局部变量,会发生什么事情? Final修饰局部变量:基本类型:其值不能被改变;引用类型:是地址值不能被改变,对象中的属性可以改变;26. 什么是多态?多态的体现,前提,
7、好处和弊端分别是什么?多态:多态就是事物存在的多种形态前提: 要有继承关系 要有方法重写 要有父类引用指向子类对象好处: 提高代码的复用性和维护性; 提高代码的扩展性;父类作参数时候弊端: 不能使用子类的特有属性和行为27.什么是向上转型和向下转型?向上转型:父类的引用指向子类对象;向下转型:把父类的引用转换子类,用子类强转父类的引用 28.多态中成员方法和变量的特点? 成员方法:编译时看父类(左边),运行时看子类 (右边) 成员变量:编译时看父类(左边),运行时看父类(左边)29.抽象类和抽象方法的特点,有什么关系? 1、抽象类和抽象方法必须用abstract关键字修饰 2、抽象类不一定有抽
8、象方法,有抽象方法的类一定是抽象类或者接口 3、抽象类不能实例化,按照多态的方式,由具体的子类实例化; 抽象类中的子类,要么是抽象类,要么要重写抽象类中的所有抽象方法;30.抽象类中的抽象方法和非抽象方法的区别? 抽象方法:强制要求子类做的事情; 非抽象方法:子类继承的事情,提高代码复用性31.abstract不能和哪些关键字共同存在? 1、abstraet和static:被abstract修饰的方法没有方法体,被static修饰的可以是类名,但是类名,调用抽象方法是没有意义的; 2、abstract和final:abstract修饰的方法强制子类重写,被final修饰的不让子类重写,所以他们
9、是矛盾的; 3、abstract和private:被abstract修饰的是为了让子类看到并强制重写,被private修饰不让子类访问,所以他们是矛盾的32.final修饰的变量、方法、和类有什么特点? Final修饰的变量变常,只能被赋值一次;final修饰的方法不能被重写 ;final修饰的类不能被继承;33.接口中的成员的特点? 特点:1、 成员变量只能是常量 ,并且是静态的并公共的。2、 构造方法:接口没有构造方法;3、 成员方法:只能是抽象方法。34、类与类、类与接口、接口与接口的关系? 1、类与类:继承关系,只能单继承,可以多层继承; 2、类与接口:实现关系,可以单实现,也可以多实
10、现;并且还可以在继承一个类的同时实现多个接口; 3、接口与接口:继承关系,可以单继承,也可以多继承;35.接口和抽象类的区别? 1、成员区别:抽象类:成员变量:可以变量,也可以常量; 构造方法:有 成员方法:可以抽象,也可以非抽象接口:成员变量:只可以常量 构造方法:没有 成员方法:只可以抽象2、关系区别:类与类:继承,单继承,类与接口:实现,单实现,多实现接口与接口:继承,单继承,多继承3、设计理念区别:抽象类:被继承体现的是:is a的关系。抽象类中定义的是该继承体系的共性功能接口:被实现体现的是:like a 的关系。接口中定义的是该继承体系的扩展功能 对事物本质的抽象用抽象类,对事物
11、功能的扩展用接口36.接口的思想特点? 特点:1、接口用关键字interface表示 interface 接口名 2、类实现接口用implements表示,class 类名 implements接口名 3、接口不能实例化:按照多态的方式来实例化 4、接口的子类:可以是抽象类但是意义不大,可以是具体类要重写接口中的所有抽象方法37什么是内部类,特点是什么? 内部类:书写一个类里面,成员内部类; 特点:1、 可以直接访问外部类的成员,包括私有的2、 如果外部需要访问内部类的成员时候,需要创建外部类、内部类对象38.成员内部类是什么? 39内部类的方法如果访问局部变量,内部类的成员变量,外部类的成员
12、变量? 内部类需要访问局部变量的时候,这个局部变量需要添加final;可以直接访问外部类的成员变量;40.局部内部类访问的局部变量为什么要用final修饰? 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用;41什么是匿名内部类? 写在方法里面的42、匿名对象何时使用?43.四种权限修饰符的比较? Publicprotected默认private44.pack
13、age,import,class使用顺序? Package:放在语句的第一行; Import:放在package下面,class上面,可以有多个 Class:放在import下面,45.代码块的分类?静态代码块、构造代码块、局部代码块、同步代码块;编程题1、使用面向对象方式描述猫狗类/学生老师类/员工类/长方形类猫狗类class Test_Animal public static void main(String args) Cat c = new Cat(); /c.Cat(大花猫,4,18.0); c.setColor(大花猫); c.setLeg(4); c.setWeight(19.0
14、); c.eat(); c.sleep(); System.out.println(这是一只懒懒的+c.getColor()+-+c.getLeg()+-+c.getWeight(); System.out.println(-); Dog d = new Dog(大黑狗,3,18.8); d.eat(); d.sleep(); System.out.println(d.getColor()+-+d.getLeg()+-+d.getWeight(); System.out.println(-); singple(new Cat(小白猫,4,18.9); singple(new Dog(小黄狗,4
15、,8.9); public static void singple(Animal a) /使用父类作为参数 a.eat(); a.sleep(); abstract class Animal / 创建父类Animal private String color; / 定义成员变量 private int leg; private double weight; public Animal() System.out.println(这是父类的无参构造); public Animal(String color,int leg,double weight) this.color = color; thi
16、s.leg = leg; this.weight = weight; public void setColor(String color) this.color = color; public String getColor() return color; public void setLeg(int leg) this.leg = leg; public int getLeg() return leg; public void setWeight(double weight) this.weight = weight; public double getWeight() return wei
17、ght; public abstract void eat(); public abstract void sleep(); class Cat extends Animal public Cat() System.out.println(这是子类猫的无参构造); public Cat(String color,int leg,double weight) super(color,leg,weight); public void eat() / 重写抽象方法 System.out.println(猫喜欢吃鱼); public void sleep() / 重写抽象方法 System.out.p
18、rintln(猫睡觉萌萌的); class Dog extends Animal public Dog() / 空参构造 System.out.println(这是狗的空参构造); public Dog(String color,int leg,double weight) / 有参构造 super(color,leg,weight); public void eat() / 重写抽象方法 System.out.println(狗喜欢吃骨头); public void sleep() / 重写抽象方法 System.out.println(狗喜欢大白天的睡觉); 学生老师类class Test
19、_person public static void main(String args) student s = new student(); s.sleep(); s.setName(adele); s.setAge(28); s.setGentle(女); System.out.println(英国女歌手+s.getName()+,年龄+s.getAge()+,特别有才华的+s.getGentle()+歌手); teacher t = new teacher(钟老师,28,男); t.sleep(); System.out.println(t.getName()+是个很负责任的老师,年龄+
20、t.getAge()+,姓别+t.getGentle(); abstract class person private String name; private int age; private char gentle; public person() public person(String name,int age,char gentle) this.name = name; this.age = age; this.gentle = gentle; public void setName(String name) this.name = name; public String getNa
21、me() return name; public void setAge(int age) this.age = age; public int getAge() return age; public void setGentle(char gentle) this.gentle = gentle; public char getGentle() return gentle; public abstract void sleep();class student extends person public student() public student(String name,int age,
22、char gentle) super(name,age,gentle); public void sleep() System.out.println(学习睡觉都比较早); class teacher extends person public teacher() public teacher (String name,int age ,char gentle) super(name,age,gentle); public void sleep() System.out.println(老师批发作业到很晚才睡); 员工类class Test1_Employee public static vo
23、id main(String args) coder c = new coder(小明,18000.0,88888);/ 有参构造进行赋值 c.work(); System.out.println(-); manager m = new manager(小贱,28888.0,33333,8888); m.work(); System.out.println(-); employer(new coder(小华,19999.9,999); employer(new manager(小龙,29999.9,000,8999); public static void employer(Employee
24、e) /定义方法,父类作为参数 e.work(); abstract class Employee / 创建类 private String name; / 定义姓名 private double salary; / 定义薪水 private String id; / 定义工号 public Employee() / 空参构造 public Employee(String name,double salary,String id) / 有参构造 this.name = name; this.salary = salary; this.id = id; public void setName(S
25、tring name) / 设置姓名 this.name = name; public String getName() / 获取姓名 return name; public void setSalary(double salary) / 设置薪水 this.salary = salary; public double getSalary() / 获取薪水 return salary; public void setId(String id) this.id = id; public String getId () return id; public abstract void work();
26、 / 定义抽象方法class coder extends Employee / 子类coder 继承 父类Employee; public coder() public coder(String name,double salary,String id) super(name,salary,id); public void work() / 方法重写 System.out.println(我是程序员+getName()+,我的工资是+getSalary()+,我的工号为+getId()+,每天的工作就是不断的敲代码); class manager extends Employee / 创建子类
27、manager private int bonus; / 定义特有属性 public manager() public manager(String name,double salary,String id,int bonus) super(name,salary,id); public void work() / 方法重写 System.out.println(我是项目经理+getName()+,我的工资是+getSalary()+,我的工号为+getId() +,每天的工作分配任务给程序员+每个月的奖金+bonus); 矩形类class Test1_Rectangle public sta
28、tic void main(String args) rectangle r = new rectangle(20,30); System.out.println(矩形的周长为:+r.getLength(); System.out.println(矩形的面积为:+r.getArea(); System.out.println(-); rectangle r1 = new rectangle(); r1.setWidth(50); r1.setHigh(100); System.out.println(矩形1的周长为:+r1.getLength(); System.out.println(矩形1的面积为:+r1.getArea(); class rectangle private int width; / 定义矩形的宽 private int high; / 定义矩形的高 public rectangle() /
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1