Day06:
限定符:
*限定符 public ,protected 和 private 用于控制类,方法和变量的访问
*限定符 static 用于创建类方法和类变量
*限定符 final 用于固定(finalize)类,方法和变量的实现
*限定符 abstract 用于定义抽象类和方法
*限定符 synchronized 和 volatile 用于线程
一条语句使用多个限定符时,顺序无关
通过控制访问,可以控制其他类将如何使用类。类中的方法和变量只能在该类中使用,应对与该类交互的其他类隐藏它们,这叫封装
Java 有四种访问控制:公有(public),私有(private ),受保护(protected),默认(不使用限定符)
私有(private ):只能在同一个类中访问
默认(不使用限定符): 同一个类中,同一个包,同一包子类中
受保护(protected):同一个类,同一个包,同一包子类,包外子类中
公有(public): 同一个类,同一个包,包外任何类,同一包子类,包外子类中
子类重写父类的方法不能使用比父类方法更严格的访问控制
存取器方法:防止变量被不正确使用(私有实例变量,公有存取器方法)
用 private 修饰的实例变量
用 public 修饰的存取器方法
读取方法用 set 开头, 设置方法用 get 开头
JavaBean 也是用存取器
JavaBean 要遵循三个条件:
1:执行 java.io.Serializable 接口
2:提供无参数的构造方法
3:提供getter 和 setter方法访问它们的属性,方法必须是public
静态方法和变量:用限定符 static 创建类方法和类变量
访问静态方法和静态变量用 类名.静态方法名(静态变量名)
私有的类变量也要用存取器方法来使用
Final:限定符 Final 用于类,方法和变量,指出它们将不会被修改。
Final 类不能被继承。
Final 方法不能被子类重写(覆盖)。
Final 变量的值不能被修改。
final 变量一般被称为常量,因为值不能修改。final 一般和 static 一起使用,指定是类常量。
final 方法不能被子类重写(覆盖)。将方法设为 final 一般的原因是提高效率。私有方法是 final 的,不需要显式声明。
final 类不能被继承,但是可以提高效率。
抽象:在类层次结构中,类的位置越高,其定义的抽象程度就越高。
抽象类:使用限定符 abstract 来声明。不能被实例化只能被继承。包含抽象方法。可以包含非抽象的方法。
abstract 不能修饰局部变量,不能修饰构造方法。
抽象方法:使用限定符 abstract 来声明。抽象方法必须被子类重写(覆盖)。
接口:用关键字 interface 定义。接口里只能出现常量和抽象方法。接口可以实现多继承。
实现接口使用关键字 implements ,如果实现多个接口用(,)隔开。
接口可以(extends)继承一个或者多个接口。
关键字 import 使用包中的类。
如果类名冲突,可以用完整的包名加类名区别。
关键字 package 创建自己的包。
sun公司推荐的包命名规则是使用internet域名元素颠倒。
内部类:
在一个类中,与变量,方法同意位置的类被称为内部类。
内部类例子代码:
class TestA {
private String s = "Hello World";
public void hello() {
new TestB().print(s);
}
private class TestB { //A类中的内部类B
String s;
public void print(String s){
this.s=s;
System.out.println(s);
}
}
}
public class TestNu {
public static void main(String[] args) {
new TestA().hello();
}
}
内部类的好处:可以方便的访问包装类的成员;可以更清楚组织逻辑,防止不应该被其它类访问的类进行访问
什么时候使用内部类:这个类不允许或者不需要其它类访问时,可以使用内部类。
匿名内部类:
public class testnm {
public static void main(String[]args) {
new demo().get();
}
}
interface person {
public void print();
}
class demo {
public void fun(person p) {
p.print();
}
public void get(){
this.fun(new person(){ //person是一个接口不能实例化,所以在这里作为匿名内部类,出现一次
public void print(){
System.out.println("你好!!");
}
});
}
}