Java程序设计 作业4

it2026-01-29  3

习题

1

封装 继承 多态

2

修改属性的可见性来限制对属性的访问(一般限制为private)对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问

3

作用方法:通过发送消息相互作用。

作用条件:

引用必须引用了特定的对象对象必须定义了相应的属性和方法被访问的属性和方法必须具有可访问的权限

4

基类的 protected 成员是包内可见的,并且对子类可见;若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

5

Object clone()boolean equals(Object obj)void finalize()Class getClass()int hashCode()String toString()void notify()void wait()

6

方法名称相同,参数不同

7

条件: 1.同名方法,参数和返回类型相同 2.子类的访问修饰符权限应大于或等于父类 3.同名的 static方法和非 static方法不能相互覆盖 4.方法前有 final修饰符,此方法不能在子类中进行覆盖 5.抽象类中如果存在抽象方法,则具体子类必须对抽象方法进行覆盖

不一定覆盖,参数不同时为重载。

8

封装:将内部属性与外界分隔开,通过公有方法访问和修改内部属性,有利于保持系统的稳定性 继承:对已经实现的功能和代码进行复用,缩短开发时长 多态:其中重载对于类似的功能提供统一的接口,有利于对功能进行复用以及扩充,覆盖使得同样的消息对于不同的类的对象有不同的结果

补充问答

1

访问控制修饰符: public:接口访问权限 protected:包访问权限,继承访问权限 默认:包访问权限 private:无法直接访问

测试包:

类one:

package PackageOne; public class one { public String a = "I'm public in one of PackageOne"; protected String b = "I'm protected in one of PackageOne"; String c = "I'm default in one of PackageOne"; private String d = "I'm private in one of PackageOne"; public void EchoPublic(){ System.out.println("public in one"); } protected void EchoProtected(){ System.out.println("protected in one"); } void Echodefault(){ System.out.println("deafult in one"); } private void EchoPrivate(){ System.out.println("private in one"); } public static void main(){ one test = new one(); }

类two:

package PackageOne; class two { public String a = "I'm public in two of PackageOne"; protected String b = "I'm protected in two of PackageOne"; String c = "I'm default in two of PackageOne"; private String d = "I'm private in two of PackageOne"; public void EchoPublic() { System.out.println("public in two"); } protected void EchoProtected() { System.out.println("protected in two"); } void Echodefault() { System.out.println("deafult in two"); } private void EchoPrivate() { System.out.println("private in two"); } }

相同包中验证用类Sampackage:

package PackageOne; public class samepackage { public static void main(String[] args) { one test1 = new one(); System.out.println(test1.a); System.out.println(test1.b); System.out.println(test1.c); // System.out.println(test1.d); test1.EchoPublic(); test1.EchoProtected(); test1.Echodefault(); // test1.EchoPrivate(); } }

不同包中验证用类differentpackage:

package PackageTwo; import PackageOne.one; public class differentpackage { public static void main(String[] args) { one test2 = new one(); System.out.println(test2.a); // System.out.println(test2.b); // System.out.println(test2.c); // System.out.println(test2.d); test2.EchoPublic(); // test2.EchoProtected(); // test2.Echodefault(); // test1.EchoPrivate(); } }

结果:

相同包中的类可以访问除private的其他所有字段和方法。

运行结果: 2. 不同包中的类:缺省类two无法import: 3. 不同包中的类无法访问除public以外的所有字段和方法: 运行结果:

2

判断访问控制修饰符在子类访问中的影响

package my; class X{ public String a = "I'm public in X"; protected String b = "I'm protected in X"; String c = "I'm default in X"; private String d = "I'm private X"; public void EchoPublic(){ System.out.println("public in X"); } protected void EchoProtected(){ System.out.println("protected in X"); } void Echodefault(){ System.out.println("deafult in X"); } private void EchoPrivate(){ System.out.println("private in X"); } } class ChildOfX extends X{ } public class ChildTest { public static void main(String[] args){ ChildOfX test = new ChildOfX(); System.out.println(test.a); System.out.println(test.b); System.out.println(test.c); // System.out.println(test.d); test.EchoPublic(); test.EchoProtected(); test.Echodefault(); // test.EchoPrivate(); } }

结果:

父类中的除private的字段和方法以外的字段和方法子代都可以访问。 运行结果:

3

组合:一个对象是另一个对象的数据成员 作用:代码复用的一种方法,使用多个已有的对象组合为一个功能更加复杂强大的新对象

4

重载: 相同方法在传入不同的参数类型或个数时返回不同 作用:简化操作 例: System.out.println(1)可以打印int型 System.out.println(“Hello World!”)可以打印String型

5

覆盖:子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)进行重新定义,即在子类中定义和父类中已经定义的同名但是内容不同的方法 作用:子类调用与父类同名的方法后,调用的是子类自己的方法

package my; class XX{ public void print(){ System.out.println("initial string"); } } class Overrided extends XX{ public void print(){ System.out.println("string is overrided!"); } } class disOverrided extends XX{ } public class OverrideTest { public static void main(String[] args){ XX test = new XX(); Overrided test1 = new Overrided(); disOverrided test2 = new disOverrided(); test.print(); test1.print(); test2.print(); } }

结果:

最新回复(0)