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 }
  • 相关阅读:
    创建双向数据绑定 ng-model
    数据绑定指令
    ios操作系统输入完成后,键盘没有弹下去的问题
    anjularjs 指令(1)
    关于苹果手机模态框问题
    手机端页面中去除a标签点击时的默认样式
    ffsfsdsfsfd
    8、排列组合
    7、递归的二分查找
    6、递归
  • 原文地址:https://www.cnblogs.com/bfcs/p/10311373.html
Copyright © 2011-2022 走看看