JAVA学习记录②——内部类的总结

说起内部类,刚开始还有点晕,后来慢慢看懂了。

其实内部类还是可以拿手机做对比,类是一整台手机的抽象,类就是里面某一个部件的抽象。

1.这是一个最简单的例子:

/*
 * 下面是一整台抽象的手机
 */
class phone{
    float cpu= 1.2f;

    //内部类:cpu类表示了手机里面抽象的cpu
    class cpu{
        //cpu应该能做的事
        void print(){
            System.out.println("Cpu works!");
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){
        //先将手机实体化,变成了iPhone
        phone iPhone = new phone();
        //iPhone的cpu也实体化
        phone.cpu gaoTong = iPhone.new cpu();
        gaoTong.print();
    }
}

 

2.要是内部类和外部类变量重名了怎么办?

class phone{

    //外部的cpu变量
    float cpu= 1.2f;

    class cpu{

        //内部的cpu变量
        float cpu = 1.5f;

        void print(){
            System.out.println("Cpu works!");

            //内部的什么都不用加就可以直接读取
            System.out.println(this.cpu);
            //外部的需要加phone.this
            System.out.println(phone.this.cpu);
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){

        phone iPhone = new phone();
        phone.cpu gaoTong = iPhone.new cpu();

        gaoTong.print();
    }
}

结果是:

Cpu works!
1.5
1.2

于是发现访问内部的变量不需要进行操作(this不加也是可以的),然而外部的需要加上phone.this

3.如果内部类被static了呢?

class phone{

    static float cpu = 1.5f;

    static class cpu{
        float cpu = 1.5f;
        void print(){
            System.out.println(cpu);

            //内部想要访问外部的东西,外部一定得是static的
            System.out.println(phone.cpu);
        }
    }
}

public class HelloWorld {
    public static void main(String[] agrs){

        /*和之前有什么不一样吗?
         * 因为内部类static之后,phone.cpu是一个整体
         * 对象直接可以new出来
         */
        phone.cpu gaoTong = new phone.cpu();

        gaoTong.print();
    }
}

结果是:

1.5
1.2

 4.那么内部类被private了呢?

class phone {

    private float cpu = 1.2f;

    private class cpu {
        private float cpu = 1.5f;

        private void cpuPrint() {

            System.out.println(cpu);
        }
    }

    //用一个phone的方法,调用内部类cpu的变量
    public void print() {
        new cpu().cpuPrint();
    }
}

public class HelloWorld {
    public static void main(String[] agrs){

        //于是这里就不用new内部类了
        phone iPhone = new phone();
        iPhone.print();
    }
}

结果是:

1.5

总结:

内部类的好处是能够直接访问外部类的元素,即使是private的,就好像cpu可以直接获得手机的电力

时间: 2024-11-13 09:51:15

JAVA学习记录②——内部类的总结的相关文章

java学习记录(2):JMenuBar

1.在用这个时候发现很多的组件都有J的前缀,例如Button和JButton,前者是awt包的,后者是swing包的,两者耳朵区别是: AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers. 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库.由于不同操作系统的图形库所提供的功能

java学习记录(4):ActionListener

1.ActionListener是处理被点击的事件的. 除了像之前每个元素都独立写一个listener之外,还可以统一用一个 s.setActionCommand("sec"); m.setActionCommand("min"); s.addActionListener(new SetHandler()); m.addActionListener(new SetHandler()); private final class SetHandler implement

java学习记录(1):layout

BorderLayout布局管理器:BorderLayout 也是一种非常简单的布局策略,它把容器内的空间简单地划分为:North,South,East,West和Center 5个区域,每加入一个组件都应该指明把这个组件加在哪个区域中.BorderLayout是顶层容器(Window,Frame, Dialog)的默认布局管理器. BorderLayout界面最多只能显示5个控件,若在一个区域中加上多个component,则只有最后加上的那个是可见的.加入控件的时候,可以指定加入的方位,默认的

Java学习记录第一章

学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言--->高级语言(面向过程的语言和面向对象的语言)总而言之就是从人类比较难识别的字符串向人类自然语言靠近使代码的可读性越来越高. Java的发展过程:1991年Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,帕特里克.詹姆斯·高斯林.麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕

JAVA学习--局部内部类的使用

1 public class TestInnerClass1 { 2 3 } 4 5 class OuterClass{ 6 //局部内部类 7 //如下的使用方式较少 8 public void method1(){ 9 10 class InnnerClass{ 11 12 } 13 } 14 //常常使用一个方法,使其返回值为某个类或接口的对象.而这个类或接口在方法内部创建 15 //使用方式一 16 public Comparable getComparable(){ 17 //1.创建

0924 java学习记录

一 .常用网站 Java 教程 _ 菜鸟教程   http://www.runoob.com/java/java-tutorial.html 天码营——Java入门基础教程  https://course.tianmaying.com/java-basic+static-variable-and-method#0 二.视频 SSM项目整合课程基本介绍_精通SSM项目整合开发实战视频课程(共26课时)_在线培训教程_51CTO学院 http://edu.51cto.com/lesson/id-76

java 学习记录

在本周,我学习了一下java基础的一些相关知识,有Java的数据类型.变量与常量.运算符与表达式,以及选择语句知识的学习,最后还有循环语句的学习.在本周的学习过程中,遇到了许多问题.学习进度明显跟不上老师的节奏,思维逻辑转变较慢,接受新知识需要时间,明显落下了很多功课.我很努力,但就是对很多东西理解不了,这是让我很苦恼的一件事情.每天尝试着变换各种学习办法,但是效率不高,没有太多的转变.我想只有挤时间从头开始把每一个知识点重新多过几次试一下吧.

java学习记录转战博客园

之前开始学习时就在安卓巴士那边记录学习笔记,但是最近由于未知原因,安卓巴士不能发表文章了.又偶然得知博客园,所以以后在这里记录学习的一切. 之前的链接: http://www.apkbus.com/home.php?mod=space&uid=833059&do=blog&view=me&from=space

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date