在你的女票面前 你没有private属性

java零基础入门-面向对象篇(十五)  内部类

内部类经常用在编写图形界面,比如swing和安卓的程序,所以在我们通常的web程序中使用较少,但是我们还是有必要来认识一下他。

内部类,顾名思义,就是定义来类内部的类。

内部类有以下几种,成员内部类,局部内部类,匿名内部类,静态内部类,下面一个个来介绍他们。

成员内部类

名字起得很好,看名字就知道是干啥的。成员内部类就是将内部类作为一个外部类的成员,地位跟变量,方法一样。

内部类一个很大的特点就是,就算我在外部类定义了一个私有变量,外部无法访问,但是内部类依然可以访问。

就好像你的微信信息和银卡密码对外人来说是绝对保密的,但是对你的女票来说就完全是另外一回事了。

你的女票可以随时随地的访问你的手机,看看微信里面有些啥消息,看看聊天记录,短信记录等等。如果零花钱不够了,还可以直接用你的手机给他的微信发红包,这操作是不是有一种很熟悉的感觉。

内部类

来看一下内部类的一些特点

1.内部类的实例化与普通类的实例化有区别,因为内部类是外部类的成员,所以使用 外部类 . 内部类 的方法表示要实例化的内部类。使用外部类对象 . new 来表示new关键字来表示要创建内部类对象。

2.当内部类属性和外部类属性相同的时候,要在内部类调用外部类的同名属性,需要使用 外部类 . this 表示外部类的this,然后用外部类的this来调用外部类的属性。

3.内部类和外部类还有一个比较有意思的特点,那就是,内部类可以直接访问外部类的属性,而外部类需要通过内部类的对象来调用内部类属性,而不能直接访问。

这个特点是不是理解起来比较麻烦?那么这样理解吧,你女票想要看你的微信随时可以看,而你要看你女票的微信需要你女票同意才行。感觉这个内部类设计的好人性化。

 

看私房钱

看到了没有,内部类是可以直接引用到外部类的成员变量的,就算他是私有的。而外部类想要访问到内部类的成员变量,直接引用会报错,需要先将内部类实例化,再用实例去引用。

理解到这里就差不多了,我们看下一个。

局部内部类

名字依然很好,局部内部类跟局部变量很相似,一般定义在方法里面,而且只能在方法内部使用。出了方法,方法内的变量就没法使用了,局部内部类也一样,在方法外不可以调用。

局部内部类

局部内部类有点像一次性使用的类,因为如果需要公用和重复调用,最好设计成外部类,而局部内部类只在方法内可以使用,方法调用完了,局部内部类也就没作用了。

这里要注意的是,局部内部类前面没有加 public,其实不仅仅是public ,所有的访问权限修饰符都不能加,因为没有意义。局部内部类只在方法中有效,所以开发访问权限没有意义。

总之记住一点,怎么使用局部变量,就怎么使用局部内部类。

匿名内部类

局部类有点一次性使用的内部类,其实还有一种就是一次性使用的内部类,那就是匿名内部类。

匿名内部类的使用有个前提,要么继承一个父类,要么实现一个接口。

匿名内部类的使用情况就是只用一次的实现类或者只用一次的子类,有了匿名内部类就不用再去定义一个子类或者实现类。

匿名内部类

首先有一个人的类,有一个花钱的方法,我们不能直接去实现他,如果直接实现它,然后在实现类里面写了花私房钱的方法,就会留下证据。所以我们要想一个方法一次性的实现花私房钱的方法。

前面讲接口的时候说过,接口是不能实例化的,所以不能使用new关键字,但是这里如果使用了匿名内部类,可以在new关键字后面跟上接口名,因为在后面写的是匿名内部类,他实现了接口。所以看上去好像是实例化了接口,实际上是创建了一个实现类去实现了接口并且实例化了一个对象。

如果Person是父类,不是接口,匿名内部类也可以使用,方法类似,因为继承和接口都是实现多态的一种方式,所以匿名内部类的使用也相似。

静态内部类

程序开发中基本用不上。知道有这货就行了。

关于内部类大致了解到这个程度就可以了。

 

本章是面向对象篇的最后一章。

从下一章开始我会开始介绍更多的java特性,将面向对象的基础打好很重要,后面很多的高级特性和一些工具都是以面向对象为基础的。

后面章节的难度会明显的加大,但是我当然有办法能够让你轻松的学会,所以赶紧点个关注吧。

这是一个简单的CPP设计打印机票票面的示例: ```cpp #include <iostream> #include <string> using namespace std; class Ticket { private: string departureCity; string arrivalCity; string departureTime; string arrivalTime; string flightNumber; string seatNumber; string passengerName; public: Ticket(string depCity, string arrCity, string depTime, string arrTime, string flightNum, string seatNum, string passenger) { departureCity = depCity; arrivalCity = arrCity; departureTime = depTime; arrivalTime = arrTime; flightNumber = flightNum; seatNumber = seatNum; passengerName = passenger; } void print() { cout << "------------------------" << endl; cout << " Plane Ticket " << endl; cout << "------------------------" << endl; cout << "Departure City: " << departureCity << endl; cout << "Arrival City: " << arrivalCity << endl; cout << "Departure Time: " << departureTime << endl; cout << "Arrival Time: " << arrivalTime << endl; cout << "Flight Number: " << flightNumber << endl; cout << "Seat Number: " << seatNumber << endl; cout << "Passenger Name: " << passengerName << endl; cout << "------------------------" << endl; } }; int main() { Ticket myTicket("New York", "Los Angeles", "12:30 PM", "3:45 PM", "AA1234", "22F", "John Smith"); myTicket.print(); return 0; } ``` 这个程序定义了一个名为Ticket的类,它存储了航班的各种信息,例如出发城市、到达城市、出发时间、到达时间、航班号、座位号和乘客姓名。类中有一个名为print的方法,它将所有信息打印在屏幕上。主函数创建了一个Ticket对象,并调用print方法来打印机票的票面。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值