Java第四章第2节:接口与内部类 之 内部类 实验+图解讲解


简介

👨‍💻个人主页@云边牧风
👨‍🎓小编介绍:欢迎来到云边牧风破烂的小星球🌝
📋专栏:Java基础知识
🔑本章内容:Java接口与内部类
记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~

接着第四章第1节接口(interface)的内容,这一节开始学习内部类和匿名类👇:

一、内部类

1.1概念

顾名思义,内部类就是

Java 一个类中嵌套另外一个类

1.2定义

内部类 :在类 A 中声明了类 B ,称 B 为内部类
外嵌类 :类 A 称为类 B 的外嵌类
内部类(B)可以访问其外嵌类(A)中的所有成员和方法
内部类的对象可以作为外嵌类的成员(即B的也是A的一部分)
内部类仅供外嵌类使用,其他类中不可以定义内部类对象(B只能A用)
注意:内部类的类体中 不可以声明类变量和类方法

1.3声明

  class People{

  int age;

  public void walk(){

  … 

  }

  class birthCity{            //这个就是内部类啦!——就是这个birthCity的类(class)

  String name;

  public void getPostcode(){ …}

  }

                }

1.4应用

为解决一个复杂问题,需要 建立一个类,而又不想它为外界所用 ,这时可以定义内部类并用其声明对象,作为外嵌类的成员

 例1:

某种类型的农场饲养了一种特殊种类的牛,但不希望其他类型的农场饲养这种特殊种类的牛,那么这种类型的农场就可以将创建这种特殊种类牛的类作为自己的内部类。

 

 New一个class,代码为👇:

public class RedCowForm {
    static String formName;
    RedCow cow ;//内部类声明对象
    RedCowForm(){   }  //构造方法
    RedCowForm(String s){    //构造方法
        cow = new RedCow(150,112,5000);
        formName = s;
    }
    public void showCowMess(){
        cow.speak();
    }
    class RedCow{    //内部类的声明
        String cowName = "红牛";
        int height,weight,price;
        RedCow(int h, int w, int p){
            height = h;
            weight = w;
            price = p;
        }
        void speak(){
            System.out.println("我是"+formName);
        }
    }//内部类结束

}//外嵌类结束

 Main中的代码为:

public class Main {
    public static void main(String[] args) {
        RedCowForm form = new RedCowForm("红牛农场");//声明一个RedCowForm的对象form
        form.showCowMess();//使用RedCowForm的shouCowMess方法=cow.speak
        form.cow.speak();//因为cow在RedCowForm中是RedCow的对象(对应form而言就是对象内部的对象)
                         // 使用的依旧是内部类RedCow的speak方法
    }
}

截图:

 

运行结果为👇:

 

例2:

手机专卖店为了促销自己的产品,决定发行内部购物券,但其他商场不能发行该购物券。编写一个手机专卖店类 ( MobileShop ) ,该类中有一个内部购物券类 ( InnerPurchaseMoney )
class MobileShop {
    InnerPurchaseMoney purchaseMoney1;
    InnerPurchaseMoney purchaseMoney2;
    private int mobileAmount;

    MobileShop() {
        purchaseMoney1 = new InnerPurchaseMoney(20000);
        purchaseMoney2 = new InnerPurchaseMoney(10000);
    }

    void setMobileAmount(int m) {
        mobileAmount = m;
    }

    int getMobileAmount() {
        return mobileAmount;
    }

    class InnerPurchaseMoney {
        int moneyValue;
        InnerPurchaseMoney(int m){
            moneyValue = m;
        }
        void buyMobile(){
            if(moneyValue>=20000){
                mobileAmount = mobileAmount-6;
                System.out.println("用价值"+moneyValue+"的内部购物券买了6部手机");
            }
            else if(moneyValue<20000&&moneyValue>=10000){
                mobileAmount=mobileAmount-3;
                System.out.println("用价值"+moneyValue+"的内部购物券买了3部手机");
            }
        }
    }
}


public class Main {
    public static void main(String[] args) {
        MobileShop shop=new MobileShop();
        shop.setMobileAmount(30);
        System.out.println("手机专卖店目前有"+shop.getMobileAmount()+"部手机");
        shop.purchaseMoney1.buyMobile();
        shop.purchaseMoney2.buyMobile();
        System.out.println("手机专卖店目前有"+shop.getMobileAmount()+"部手机");
    }
}

1.5总结

1外嵌类的子类能够继承该类的内部类,就像它自己定义的一样。

2内部类也能继承其他类

3、一个外嵌类中可以有多个内部类,而且内部类也能继承内部类;甚至可以将一个内部类声明为抽象类,然后再继承它!

一个内部类除了不能包含类方法和类变量,几乎具有普通类的所有特征

结束语:

以上是Jav第四章第2节的内容——内部类       希望大家喜欢

下一节接着讲第四章第2节的:匿名类

喜欢的可以点赞+关注哈 ❤

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云边牧风

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值