阶段二15_面向对象高级_内部类1

昨日复习:

 1)什么是多态:事物的多种形态
 2)多态的好处是: 提高代码的拓展性
 3)多态的弊端是: 不能使用子类特有功能
 4)多态的前提条件是: 必须有继承或者实现关系, 必须有方法重写, 必须有父类引用指向子类对象
 5)定义和实现接口的关键字是: interface     implements

知识点:

 1)创建普通内部类对象格式
 2)内部类的访问特点
 3)私有成员内部类访问
 4)静态成员内部类
 5)局部内部类,位置和访问方式
 6)内名内部内,前提和格式

一.多态的介绍

1.内部类概述: 
  内部类就是在一个类中定义一个类。举例:在一个A类的内部定义一个B类, B类就被称为内部类。
2.内部类的访问特点:
  内部类可以直接访问外部类的成员,包括私有
  外部类要访问内部类的成员,必须创建对象
3.创建内部类对象的格式:
  外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
--案例范例------------------------------
public class Test1Inner {
    public static void main(String[] args) {
        Outer.Inner i = new Outer().new Inner();
        System.out.println(i.num);
        i.show();
    }
}
class Outer {
    private int a = 10;
    class Inner {
        int num = 10;
        public void show(){
            System.out.println("Inner..show");
            // 内部类, 访问外部类成员, 可以直接访问, 包括私有
            System.out.println(a);
        }
    }
}
---------------------------------------------

二.成员内部类

1.按照内部类在类中定义的位置不同,可以分为如下两种形式
  在类的成员位置:成员内部类
  在类的局部位置:局部内部类

2.成员内部类,外界如何创建对象使用呢?
  格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  范例:Outer.Inner oi = new Outer().new Inner();

3.成员内部类也属于(成员),既然是成员就可以被一些修饰符所修饰
   private
     私有成员内部类访问:在自己所在的外部类中创建对象访问。
   static
     静态成员内部类访问格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
     静态成员内部类中的静态方法:外部类名.内部类名.方法名();
--私有成员内部类访问,案例范例-----------
public class Test2Innerclass {
    /*私有成员内部类演示*/
    public static void main(String[] args) {
        // 不能像普通的成员内部类直接方法
        // Outer.Inner oi = new Outer().new Inner();
        Outer o = new Outer();
        o.method();
    }
}
class Outer {
    private class Inner {
        public void show(){
            System.out.println("inner..show");
        }
    }
    public void method(){
        Inner i = new Inner();
        i.show();
    }
}
----------------------------------------
--静态成员内部类,案例范例---------------
public class Test3Innerclass {
    /* 静态成员内部类演示*/
    public static void main(String[] args) {
        Outer.Inner oi = new Outer.Inner();
        oi.show();
        Outer.Inner.method();
    }
}
class Outer {
    static class Inner {
        public void show(){
            System.out.println("inner..show");
        }
        public static void method(){
            System.out.println("inner..method");
        }
    }
}
----------------------------------------

三.局部内部类

1.编写位置: 方法中
2.访问方式: 只能在方法中, 创建对象并访问
3.局部内部类:可以直接访问外部类的成员,也可以访问方法内的局部变量
--局部内部类,案例范例---------------
public class Test4Innerclass {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}
class Outer {
    int a = 10;
    public void method(){
        int b = 20;
        class Inner {
            public void show(){
                System.out.println("show...");
                System.out.println(a);
                System.out.println(b);
            }
        }
        Inner i = new Inner();
        i.show();
    }
}
------------------------------------

四.局部内部类

1.概述:匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)
2.前提:需要存在一个接口或类
3.格式:
new 类名或者接口名() { 重写方法; };
4.理解:匿名内部类是将(继承 \ 实现)(方法重写)(创建对象)三个步骤,放在了一步进行
--匿名内部类,案例范例---------------
public class Test5Innerclass {
    public static void main(String[] args) {
        // 匿名内部类的理解: 将继承\实现, 方法重写, 创建对象, 放在了一步进行.
        new Inter() {
            @Override
            public void show() {System.out.println("我是匿名内部类中的show方法");}
        }.show();
        // 情况: 接口中存在多个方法
        Inter2 i = new Inter2() {
            @Override
            public void show1() { System.out.println("show1...");}
            @Override
            public void show2() { System.out.println("show2..."); }
        };
        i.show1();
        i.show2();
    }
}
interface Inter {  void show();}
interface Inter2 { void show1();   void show2();}
------------------------------------
--匿名内部类应用--------------------
public class TestSwimming {
    public static void main(String[] args) {
        Swimming swimming = new Swimming() {
            @Override
            public void swim() {  System.out.println("铁汁, 我们去游泳吧"); }
        };
        goSwimming(swimming);
    }
    /** 使用接口的方法 */
    public static void goSwimming(Swimming swimming){
        swimming.swim();
    }
}
/* 游泳接口 */
interface Swimming {   void swim(); }
------------------------------------

五.更多内容请查看下面
http://www.gxcode.top/code
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java之书

会持续更新实用好的文章谢谢关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值