Java编程思想 练习题(五)

  一、展示protected方法具有包访问权限,但是它仍旧不是public的。

package com.springboot.demo;

public class Human {
    protected void doHouseWork() {
        System.out.println("---------Human Do housework---------");
    }
}
package com.springboot.demo;

public class Main {
    public static void main(String[] args) {
        // same package:public、protected、default
        Human human = new Human();
        human.doHouseWork();
    }
}

返回:

---------Human Do housework---------

  二、创建一个带有public,private,protected和包访问权限域以及方法成员的类。创建该类的一个对象,看看你在试图调用所有类成员时,会得到什么类型的编译信息。请注意,处于同一个目录中的所有类都是默认包的一部分。

package com.springboot.demo;

public class Human {
    private String msg0="Human Garden of Eden";
    String msg1="Human Do laundry";
    protected String msg2="Human Do housework";
    public String msg3="Human Eat";
    private void secret(String msg){
        System.out.println("---------" + msg + "---------");
    }
    void doLaundry(String msg){
        System.out.println("---------" + msg + "---------");
    }
    protected void doHouseWork(String msg){
        System.out.println("---------" + msg + "---------");
    }
    public void eat(String msg){
        System.out.println("---------" + msg + "---------");
    }
}
package com.springboot.demo;

public class Main {
    public static void main(String[] args) {
        // same package:public、protected、default
        Human human = new Human();
        human.doLaundry(human.msg1);
        human.doHouseWork(human.msg2);
        human.eat(human.msg3);
    }
}

返回:

---------Human Do laundry---------
---------Human Do housework---------
---------Human Eat---------

  三、创建一个带有protected数据的类。运用在第一个类中处理protected数据的方法在相同的文件中创建第二个类。

package com.springboot.demo.protectedPackage;

public class ProtectedClass {
    protected String classMsg = "protected object";
    protected void protectedMethod(String msg) {
        System.out.println("---------" + msg + "---------");
    }
}
package com.springboot.demo.protectedPackage;

public class SamePackageClass {
    public ProtectedClass protectedClass = new ProtectedClass();
    public void samePackageMethod(){
        protectedClass.protectedMethod("same package class transfer " + protectedClass.classMsg);
    }
}
package com.springboot.demo;

import com.springboot.demo.protectedPackage.SamePackageClass;

public class Main {
    public static void main(String[] args) {
        SamePackageClass obj = new SamePackageClass();
        obj.samePackageMethod();
    }
}

返回:

---------same package class transfer protected object---------

  四、效仿示例Lunch.java的形式,创建一个名为ConnectionManager的类,该类管理一个元素为Connection对象的固定数值。客户端程序员不能直接创建Connection对象,而只能通过ConnectionManager中的固定数组。客户端程序员不能直接创建Connection对象,而只能通过ConnectionManager中的某个static方法来获取它们。当ConnectionManager之中不再有对象时,它会返回null引用。在main()之中检测这些类。

Lunch.java源码:

public class Lunch {
    void testPrivate() {
    }
    void testStatic() {
        Soup1 soup1 = Soup1.makeSoup();
    }
    void testSingleton() {
        Soup2.access().f();
    }
}
class Soup1 {
    private Soup1() {
    }
    public static Soup1 makeSoup() {
        return new Soup1();
    }
}
class Soup2 {
    private Soup2() {
    }
    private static Soup2 soup = new Soup2();
    public static Soup2 access() {
        return soup;
    }
    public void f() {
    }
}

ConnectionManager

public class ConnectionManager {
    private static Connection[] connectionArray = new Connection[3];
    static {
        for (int i = 0; i < connectionArray.length; i++) {
            connectionArray[i] = Connection.makeConnection();
        }
    }
    public static Connection[] getConnectionArray(){
        return connectionArray;
    }
}
class Connection {
    private static Connection connection;
    private Connection() {}
    public static Connection makeConnection() {
        return new Connection();
    }
}
public class Main {
    public static void main(String[] args) {
        ConnectionManager manager = new ConnectionManager();
        for (Connection c : manager.getConnectionArray()) {
            System.out.println(c);
        }
    }
}

返回:

com.springboot.access.Connection@68837a77
com.springboot.access.Connection@6be46e8f
com.springboot.access.Connection@3567135c

单例的ConnectionManager,main()不变。

public class ConnectionManager {
    private static Connection[] connectionArray = new Connection[3];
    static {
        for (int i = 0; i < connectionArray.length; i++) {
            connectionArray[i] = Connection.makeConnection();
        }
    }
    public static Connection[] getConnectionArray(){
        return connectionArray;
    }
}
class Connection {
    private static Connection connection = new Connection();
    private Connection() {}
    public static Connection makeConnection() {
        return connection;
    }
}

返回:

com.springboot.access.Connection@68837a77
com.springboot.access.Connection@68837a77
com.springboot.access.Connection@68837a77

 

猜你喜欢

转载自www.cnblogs.com/jojo-wang/p/12081050.html