类的高级概念(内部类和访问)

来源:互联网 发布:首轮融资知乎 编辑:程序博客网 时间:2024/06/06 03:22
关键字 : static , extends, public, protected, private


Java为类中的成员提供了四种访问级别:
* 访问级别由大到小:public>protected>默认>private

1.公开访问级别: 使用 public 关键字;用public关键字修饰的成员对外公开,可以被任何其它对象访问.

2.受保护访问级别: 使用 protected 关键字;受保护的成员可以被同一个包中的类所访问,还可以被类的子类访问,不管子类在哪个包中.

3.默认访问级别(猿类自定friendly): 没有访问修饰符.默认访问级别的成员可以被同一个包中的其它类所访问.

4.私有访问级别: 使用 private 关键字.它是四种访问修饰符中级别最低的,只有类本身可以访问它.


* 子类方法的修饰符必须不小于父类方法的修饰符;
* 子类抛出的异常不能比父类抛出的多;


封装:
    封装的成员变量都是private,提供public方法访问这些成员变量的技术。(封装也称为数据隐藏)。
    继承、封装、多态、抽象是面向对象编程的四大概念。
    封装包含get()和set()方法,不能说成get()、set()就是封装。
    封装的一些好处:
    ①类的成员变量可以成为只读或者只写的。
    ②类可以对存储在其成员变量中的内容有一个整体的控制。
    ③类的用户不需要知道类是如何存储数据的。
 




静态成员:
        1.通过static 声明的成员变量或者方法可以被认为是全局的;
        2.静态的成员变量不能使用引用来访问,要使用类名;
  
 静态或非静态的方法可以访问静态的成员变量
 静态方法不能访问非静态的成员变量或方法(实例成员变量或方法);


静态初始化块:  一组当类被JVM的 类加载器 加载时执行的语句.
 
定义语法
static{
//语句出现在这里
}


实例化初始化块: 它在类的对象每次实例化时执行一次,在构造器调用之前执行
 
定义语法

{
//语句出现在这里
}


实例:

--父类public class Vehicle {static {System.out.println("静态初始化块加载中...");}{System.out.println("(实例)初始化块加载中...");}Vehicle(){System.out.println("父类构造器加载中...");}}--子类public class Bus extends Vehicle {{System.out.println("逗b程序正在运行...");}public Bus(){System.out.println("子类构造器加载中...");}}main方法:public class Test {public static void main(String[] args) {Bus c = new Bus(); }}执行结果:静态初始化块加载中...(实例)初始化块加载中...父类构造器加载中...逗b程序正在运行...子类构造器加载中...

 四种内部类 : 成员内部类,局部内部类,静态内部类,匿名内部类
 从位置上来区分有:成员内部类 -- 静态内部类
局部内部类 -- 匿名内部类
1.成员内部类:位置和成员变量一致.

例:public class Test {//类Test为外部类public class Fun{                    //--类Fun 为内部类Scanner sc = new Scanner(System.in);public int sum(){System.out.println("请输入两个数:");int x = sc.nextInt();int y = sc.nextInt();return x+y;}}public static void main(String[] args) {Test t = new Test();Fun f = t.new Fun();//Fun f = new Test().new Fun();System.out.println("两数和:"+f.sum());}}
2.局部内部类:在类的方法内部中定义的,只能在方法内部使用例:public class Test {Scanner sc = new Scanner(System.in);public int add() {System.out.println("请输入两个数:");int a = sc.nextInt();int b = sc.nextInt();class Math {public int sum(int x, int y) {return x + y;}}// Math m = new Math();// return m.sum(a, b);return new Math().sum(a, b);}public static void main(String[] args) {Test t = new Test();// Fun f = t.new Fun();System.out.println("两数和:" + t.add());}}3.静态内部类 : 在成员内部类前加static4.匿名内部类: 它的定义与对象的创建合并在一起,它是为唯一对象而定义的类.定义:new 类或者接口的名字(){//匿名内部类的主体}public class Test {public static void main(String[] args) {Sum f = new Sum();f.add(new Fuck() {public int JF(int x, int y) {return x - y;}});}}class Sum {public void add(Fuck jf) {System.out.println("结果为:" + jf.JF(10, 5));}}class Fuck {public int JF(int x, int y) {return x + y;}}



0 0