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("你好!!");
   }
  });
 }
}