不应该通过类实例访问静态成员_Java内部类

本文详细介绍了Java内部类的概念、主要作用和不同类型的内部类,包括非静态内部类、静态内部类、局部内部类以及匿名内部类。重点讨论了非静态内部类可以直接访问外部类的私有数据,而静态内部类不能访问外部类的实例成员,但可以访问静态成员。此外,还给出了各种内部类的使用示例。
摘要由CSDN通过智能技术生成

内部类的初步介绍

1.1 内部类的定义

当我们将一个类A放置于另一个类B的内部定义时,那么我们称A为内部类(或嵌套类),称B为外部类(或宿主类)。

1.2 内部类的主要作用

  1. 内部类提供了更好的封装效果,可以将内部类隐藏在外部类之内,在内部类中完成封装效果;
  2. 内部类成员可以直接访问外部类的私有数据,可以作为外部类的成员,一个类中的成员可以相互访问;
  3. 匿名内部类可以用于创建仅需要使用一次的类;

1.3 内部类与外部类的区别

  1. 内部类可以使用private、protected、static修饰符修饰,外部类不能;
  2. 非静态内部类不能有静态成员;

非静态内部类

内部类划分及非静态内部类简介

在外部类的方法中定义的类为局部内部类;

定义在外部类中的类为成员内部类,成员内部类与类中的其他成员相似,可以相互访问,成员内部类分两种,使用static修饰的内部类为静态内部类,无static修饰的内部类为非静态内部类;

非静态内部类示例

例如,我们在Cow类中定义一个ComLeg的非静态内部类,并在CowLeg类的实例方法中可以直接访问外部类Cow的private修饰的实例变量。代码如下:

public class Cow {

// 外部类的私有实例成员变量

private double weight;

// 外部类的构造器

public Cow() {}

public Cow(double weight) {

this.weight = weight;

}

// 定义非静态内部类

private class CowLeg{

// 非静态内部类的私有成员变量

private double length;

private String color;

// 非静态内部类的构造器

public CowLeg() {}

public CowLeg(double length, String color) {

this.length = length;

this.color = color;

}

// 在内部类中实现封装

public double getLength() {

return length;

}

public void setLength(double length) {

this.length = length;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

// 在内部类中的info方法,输出信息

public void info() {

System.out.println("牛腿的颜色是:" + color + ",高为:" + length);

// 当外部类的私有成员初始化后,便可以访问外部类的私有成员

System.out.println("在内部类中查看奶牛的重

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值