Java第5章作业:面向对象(中)面向对象的特征
本章主要知识结构如下:
面向对象的特征(三点):
- 封装
- 继承
- 多态
第一题:Java的访问控制修饰符有哪些?各有什么访问权限?请对照第7页ppt的表格分别写程序验证。
Java中的访问控制符有public
, protected
, private
以及默认
四种。
第7页的表格如下:
表格中第一列表示类的属性或方法前面的修饰符,ABCD代表不同级别的类,如下图:
从表格中可以看出,类前修饰符有两个,分别是public与缺省。若为缺省,则该类无法被包外的类所访问,仅可以被包中的类访问,若为public则可以被包外的类访问。
下面用一个例子来展示类前修饰符为public
时,不同包与相同包内的类的访问情况。
- 首先在
com.resource
包中定义一个SomeVar
类,其含有3种修饰符修饰的变量。package com.resource; public class SomeVar { public String varPublic = "Public"; protected String varProtected = "Protected"; private String varPrivate = "Private"; }
- 然后
com.resource
包中建立SamePack
类,
这里会在引用package com.resource; public class SamePack { public static void main(String[] args){ SomeVar sv = new SomeVar(); System.out.println(sv.varPublic); // 无报错 System.out.println(sv.varProtected); // 无报错 System.out.println(sv.varPrivate); // The field SomeVar.varPrivate is not visible } }
varPrivate
变量时报错,表明private
修饰的变量无法被包内其他的类访问,只能被本类访问。 - 在
com.run
包内建立RunVar
类,
由于package com.run; import com.resource.SomeVar; public class RunVar { public static void main(String[] args){ SomeVar sv = new SomeVar(); System.out.println(sv.varPublic); // 无报错 System.out.println(sv.varProtected); // The field SomeVar.varProtected is not visible System.out.println(sv.varPrivate); // The field SomeVar.varPrivate is not visible } }
RunVar
类与SomeVar
类不在同一个包内,所以其不能访问SomeVar
类的varProtected
与varPrivate
属性。
第二题:子类对于从父类继承的哪些属性与方法是可见的?请分别写程序进行验证。
子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类中是可见的,private修饰的属性和方法仅对本类(父类)课件。
下面用一个例子来说明:
class FatherPlane{
public String namePub = "Public name";
protected String namePro = "Protected name";
private String namePri = "Private name";
}
class SonPlane extends FatherPlane{
public void setName(String name_){
this.namePri = "new private"; // The field FatherPlane.namePri is not visible
}
}
public class RunPlane{
public static void main(String args[]) {
SonPlane sp = new SonPlane();
System.out.println(sp.namePub); // 无报错
System.out.println(sp.namePro); // 无报错
System.out.println(sp.namePri); // The field FatherPlane.namePri is not visible
}
}
第三题:什么是组合?有什么作用?请举例说明。
组合的概念:组合就是在一个类里面使用已经定义好的类对象的引用,并通过发消息的形式调用该对象的属性和方法。
组合的作用:组合不会破坏旧类的封装,整体类与局部类之间松耦合,独立性强,非常灵活,也无需担心继承所带来的一系列权限问题。
举例如下:
class Int{
int value=10;
void changeValue(int v){
this.value = v;
}
}
class NewInt{
Int a = new Int(); // 在NewInt类中调用Int类的对象引用,则为组合
void changeValue(int v){
a.changeValue(v);
System.out.println("Changing value......"+a.value);
}
}
第四题:什么是重载?有什么作用?请举例说明。
重载(overload)的概念:指的是同一个类中参数个数和类型不同但方法名相同的多个方法,返回类型可以相同也可以不同。。
**重载的作用:**重载可以使得同一个方法处理不同类型的参数并返回不同类型的值,虽然参数不同但这些同名方法所实现的作用是相同的,是实现多态的非常重要的机制。
举例如下:
public class Test {
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2 "+a);
}
public String test(int a, String s){
System.out.println("test3 "+a+' '+s);
return "return test3";
}
public static void main(String[] args){
Test t = new Test();
System.out.println(t.test());
t.test(1);
System.out.println(t.test(1,"test3"));
}
}
第五题:什么是覆盖?有什么作用?请举例说明。
**覆盖的概念:**覆盖指的是子类对父类中已经定义好的方法进行了重新定义,方法名、返回值类型和形式参数都不能改变!
**覆盖的作用:**使得子类能够灵活的根据自己的需要修改父类中所定义的方法,而无需修改父类中的实现。
举例如下:
class Father{
public void echoHello(){
System.out.println("Hello from Father!");
}
}
class Son extends Father{
public void echoHello(){
System.out.println("Hello from Son!");
}
}
public class Test{
public static void main(String[] args){
Son s = new Son();
s.echoHello(); // 输出Hello from Son!
}
}
上一篇: 哈希表大总结
推荐阅读
-
Java第5章作业:面向对象(中)面向对象的特征
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第20章:接口的定义与使用:课时91:代理设计模式
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时29:数组与方法
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时26:数组引用传递分析
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第7章:数组的定义与使用:课时34:对象数组
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时139:根据索引取得数据
-
详解java中面向对象设计模式类与类的关系
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第27章:异常的捕获及处理:课时119:异常处理流程
-
阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第23章:包的定义及使用:课时104:生成jar文件
-
java的面向对象特征(java中对象的概念)