内部类及其创建方式
引言
在定义类时,我们可以将一个类定义在另一个类的内部,此时这个类便被成为内部类。
内部类是一种非常有用的特性,因为它允许你吧一些逻辑相关的类组织在一起,并控制位于内部的类的可视性。然而必须要了解,内部类与组合是两种完全不同地方概念,这一点很重要。
在一开始,内部类看起来可能想hi是一种代码的隐藏机制,仅仅是用来将类的定义放置在其他的类的内部,但是,随着对于内部类的不断了解,我们会发现其远不止如此,它能够了解定义它的外部类,并能与之通信,利用内部类的种种特点,我们可以将代码变得更加优雅和清晰。
基本的内部类的创建方式
正如上面对于内部类的定义一样,当把一个类的定义置于另一个类的内部时,我们便完成了一个内部类的创建。
在下面,我们假设创建了一个披萨店的类,在其中定义了两个内部类,分别为奶酪披萨cheesePizza与香肠披萨sausagePizza。
package learning_java.InnerClassTest;
public class PizzaStore {
class cheesePizza {
private String name = "cheesePizza";
public void getName() {
System.out.println("Got a " + name);}
}
class sausagePizza {
private String name = "sausagePizza";
public void getName() {
System.out.println("Got a " +name);}
}
// 只有在该外部类的非静态方法中,才可以这样直接创建内部类的对象
public void orderPizza(String pizzaName) {
if (pizzaName == "cheesePizza") {
cheesePizza pizza = new cheesePizza();
pizza.getName();
}
else if (pizzaName == "sausagePizza"){
sausagePizza pizza = new sausagePizza();
pizza.getName();
}
else
System.out.println("Don't have this kind of pizza");
}
public static void main(String[] args) {
PizzaStore store = new PizzaStore();
store.orderPizza("cheesePizza");
}
}
在定义了两个披萨的内部类之后,我们又定义了一个订披萨的方法orderPizza,在这个方法里,我们会根据所输入的需要来创建披萨的对象。而我们在这个方法里面使用内部类的时候,看起来似乎与普通类并没有什么不同,在这里,实际的区别只是内部类的定义时嵌套在PizzaStore类里面的,但是接下来我们会看到,这并不是唯一的区别。
public class PizzaStore2 {
class cheesePizza {
private String name = "cheesePizza";
int size;
cheesePizza(int inputSize){
size