package com.alpha.demoa;
public class A {
protected String info = "Hello";
}
范例: 定义com.alpha.demob.B类,此类继承A类
package com.alpha.demob;
import com.alpha.demoa.A;
public class B extends A { // 是A不同包的子类
public void print() {
System.out.println("A类的info = " + super.info);
}
}
范例: 测试
package test;
import com.alpha.demob.B;
public class Test {
public static void main(String[] args) {
new B().print();
}
}
B中的print方法会输出A类中的info属性。
如果此时Test想要直接输出A类的info属性.
范例: 错误的访问
package test;
import com.alpha.demoa.A;
public class Test {
public static void main(String[] args) {
A a = new A();
System.out.println(a.info);
}
}
由于Test与A类不在统一个包中,并且没有继承关系,所以无法访问protected属性。
总结
1、Java的封装性是以private、protected、default三种权限的定义;
2、对于权限的声明,给出以下的建议:
声明属性就用private;
声明方法就用public;
关于命名要求:
类名称每一个单词的首字母大写,其余字母小写,例如StudentInfo;
属性名称第一个单词字母小写,而后每个单词首字母大写,例如:studentName;
方法名称第一个单词字母小写,而后每个单词首字母大写,例如:getName();
常量名使用大写字母表示,例如:MESSAGE;
包名称使用小写字母,例如:com.alpha.util;
构造方法私有化
1、构造方法私有化的实现形式;
2、单例与多例设计模式;
单例设计模式
在正常情况下,一个类只有产生了对象之后才可以操作这个类。
范例: 观察如下代码
class Singleton {
public void print() {
System.out.println("Hello World");
}
}
public class MainClass {
public static void main(String[] args) {
Singleton s = null; // 声明对象
s = new Singleton(); // 实例化对象
s.print();
}
}
class Sex {
private String title;
private static final Sex MALE = new Sex("男");
private static final Sex FEMALE = new Sex("女");
private Sex(String title) { // 构造方法私有化
this.title = title;
}
public String toString() {
return this.title;
}
public static Sex getInstance(int ch) {
switch (ch) {
case 1: return MALE;
case 2: return FEMALE;
default: return null;
}
}
}
public class MainClass {
public static void main(String[] args) {
Sex sex = Sex.getInstance(2);
System.out.println(sex);
}
}
class Sex {
private String title;
private static final Sex MALE = new Sex("男");
private static final Sex FEMALE = new Sex("女");
private Sex(String title) { // 构造方法私有化
this.title = title;
}
public String toString() {
return this.title;
}
public static Sex getInstance(String ch) {
switch (ch) {
case "man": return MALE;
case "woman": return FEMALE;
default: return null;
}
}
}
public class MainClass {
public static void main(String[] args) {
Sex sex = Sex.getInstance("man");
System.out.println(sex);
}
}
class Sex {
private String title;
private static final Sex MALE = new Sex("男");
private static final Sex FEMALE = new Sex("女");
private Sex(String title) { // 构造方法私有化
this.title = title;
}
public String toString() {
return this.title;
}
public static Sex getInstance(int ch) {
switch (ch) {
case 1: return MALE;
case 2: return FEMALE;
default: return null;
}
}
}
interface Choose {
public int MAN = 1;
public int WOMAN = 2;
}
public class MainClass {
public static void main(String[] args) {
Sex sex = Sex.getInstance(Choose.MAN);
System.out.println(sex);
}
}