zoukankan      html  css  js  c++  java
  • java 面向对象内部类

    1.内部类概念:将一个类定义在另一个类的内部,该类就称为内部类

    类中定义的内部类特点
    1) 内部类作为外部类的成员,可以直接访问外部类的成员
    (包括 private 成员),反之则不行。
    2) 内部类做为外部类成员,可声明为 private、默认、protected
    或 public。
    3) 内部类成员只有在内部类的范围之内是有效的。
    4) 用内部类定义在外部类中不可访问的属性。这样就在外部
    类中实现了比外部类的 private 还要小的访问权限

     1 public class Face { //
     2     private String shape="瓜子脸";//私有属性
     3     
     4     public class Nose{//鼻子
     5         private String shape="高鼻梁";
     6         public void breath(){
     7             //当内部类与外部类有相同的属性时,在访问外部类的属性时,需要加上外部类的  类名.this.属性
     8             System.out.println("鼻子长在了"+Face.this.shape+"形状的脸上");
     9             System.out.println(shape);
    10             System.out.println("有使用鼻子呼吸!");
    11         }
    12     }
    13 }

    内部类的优缺点
    优点:内部类可以直接访问外部类的私有属性
    缺点:破坏了类的结构

    2.内部类分类

    1) 成员内部类
    内部类相当于外部类的成员
    2) 静态内部类

     1 public class Outer {
     2     private static String name="张三";
     3      /**静态内部类 ,(1)不允许访问外部类的非static属性 
     4       * (2)如果内部类中的方法为static方法,那么内部类也必须为静态的*/
     5     static class Inner{ 
     6         public void show(){
     7             System.out.println(name);
     8         }
     9     }
    10     static class Inner2{
    11         public static void show(){
    12             
    13         }
    14     }
    15 }
     1 public class TestStaticInner {
     2     public static void main(String[] args) {
     3         //创建内部类的对象   new 外部类类名.内部类类名();
     4         Outer.Inner i=new Outer.Inner();
     5         i.show();
     6     
     7         //访问的是静态内部类中的静态方法
     8         Outer.Inner2.show();
     9     }
    10 }


    3) 方法中的内部类
    只能在方法中使用,相当于方法中的局部变量

     1 public class Outer {
     2     //Outer的成员方法
     3     public void show(){
     4         int a=10;//方法中的局部变量
     5         //内部类相当于show方法中的局部变量,使用范围只能在show方法中
     6         class Inner{
     7             public void fun(){
     8                 System.out.println("a="+a);
     9             }
    10         }
    11         //创建内部类的对象
    12         new Inner().fun();
    13     }
    14 }

    4) 匿名内部类 (存在继承或实现关系)
    a) 可以实现一个接口,或者继承一个父类
    b) 只能实现一个接口
    c) 适合创建那种只需要一次使用的类,不能重复使用。
    比较常见的是在图形界面编程 GUI 里用得到。

     1 public abstract class Father {//父类
     2     public abstract void dream();//伟 大的梦想
     3 }
     4 class Son extends Father{  //子类是有名称的,子类的名称叫son
     5 
     6     @Override
     7     public void dream() {
     8         
     9     }
    10     
    11 }
    12 class Test{
    13     public static void main(String[] args) {
    14         //父类引用指向子类对象
    15         Father f=new Son();  //在名字的子类
    16         /**没有名字的子类*/
    17         Father f2=new Father()
    18                 {  //没有名称的类
    19                     @Override
    20                     public void dream() {
    21                         System.out.println("努力实现父亲的伟 大梦想,当兵光荣");
    22                     }
    23                 };
    24         f2.dream();
    25     }
    26 }
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/bfcs/p/10311373.html
Copyright © 2011-2022 走看看