一、包(Package)
1.包:组织类的一种方式.
2.主要目的:保证类的唯一性.
3.使用方法:一般使用 import 语句导入包.
(使用 import static 可以导入包中的静态的方法和字段)
4.将类放入包中的基本规则:
a.在文件的最上方加上一个 package 语句指定该代码在哪个包中.
b.包名需要尽量指定成唯一的名字(便于引用), 通常会用公司的域名的颠倒形式.
c.包名和代码路径需相匹配.
d.如果一个类没有 package 语句,则会被放入默认类中.
5.使用限制:如果某个成员不包含 public 和 private 关键字(public 和 private 的成员只能被类的内部使用), 此时这个成员可以在包内部的其他类使用, 但是不能在包外部的类使用.
6.常见的系统包简述:
a. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入.
b. java.lang.reflect:java 反射编程包.
c. java.net:进行网络编程开发包.
d. java.sql:进行数据库开发的支持包.
e. java.util:是java提供的工具程序包.(集合类等非常重要)
f. java.io:I/O编程开发包.
二、继承(Inherit)
1.父类与子类
例:
public class Person {
public String name;
public Person(String name) {
this.name = name;
}
public void age(String age) {
System.out.println(age);
}
}
class Dad {
public String name;
public Dad(String name) {
this.name = name;
}
public void age(String age) {
System.out.println(age);
}
}
class Son {
public String name;
public Son(String name) {
this.name = name;
}
public void age(String age) {
System.out.println(age);
}
public void subject(String subject) {
System.out.println(subject);
}
}
从代码来看,有很多冗余的部分:
a.这三个类都具备一个相同的 age 方法, 而且行为是完全一样的.
b.这三个类都具备一个相同的 name 属性, 而且意义是完全一样的.
c.Dad 和 Son 都属于 Person.
因此,可以让 Dad 和 Son 继承 Person 的方法和属性,以达到代码重用的效果.
Person 被称为 父类、基类、或超类;
Dad 和 Son 被称为 子类、派生类;
2.使用语法及注意事项
a.使用 extends 指定父类.
b.Java 中一个子类只能继承一个父类.
c.子类会继承父类的所有 public 的字段和方法.
d.对于父类的 private 的字段和方法, 子类中是无法访问的.
e.子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用.
例:
class Person {
public String name;
public Person(String name) {
this.name = name;
}
public static void age(int age) {
System.out.println(age);
}
}
class Dad extends Person {
public Dad(String name) {
super(name);
}
}
三、protected 关键字
1.对于类的调用者来说, protected 修饰的字段和方法是不能访问的.
2.对于类的 子类 和 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的.
总结:
private: 类内部能访问,类外部不能访问;
protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问;
public: 类内部和类的调用者都能访问;
包访问权限(默认): 类内部能访问,同一个包中的类能访问,其他类不能访问;
四、final 关键字
作用:限制类被继承
final class Person {
public String name;
public Person(String name) {
this.name = name;
}
public static void age(int age) {
System.out.println(age);
}
}
class Dad extends Person {
public Dad(String name) {
super(name);
}
}
执行程序,编译出错:
五、组合(combination)
1.组合和继承类似, 也是一种表达类之间关系的方式, 也能够达到代码重用的效果.
2.组合并没有涉及到特殊的语法(诸如 extends 这样的关键字), 仅是将一个类的实例作为另外一个类的字段.
例:
public class Dad {
public String name;
public Dad(String name) {
this.name = name;
}
public void age(int age) {
System.out.println(age);
}
}
public class Son {
public String name;
public Son(String name) {
this.name = name;
}
public void age(String age) {
System.out.println(age);
}
}
public class family {
public Dad[] dads;
public Son[] sons;
}
注意:
a.组合表示 has - a 语义:
在刚才的例子中, 一个家庭中 “包含” 家庭成员 Dad 和 Son.
b.继承表示 is - a 语义:
在上面的 “Person 和 Dad” 的例子中, Dad 和 Son 都是 Person.