一、内部类对象的创建有两种情况:
1.静态内部类
2.非静态内部类
这两种情况主要区别是 在创建内部类对象的时候需不需要创建外部类的对象。
二、实例展示
1.非静态内部类
非静态内部类创建对象也有几种情况
1)、常规情况
public class Outerclass {
private String name;
private int a;
public void Stingto(String ident) {
(ident);
}
public class innerclass{
public void to() {
(name);
}
}
public void print(){
(a);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String identname = "tuo";
Outerclass q = new Outerclass();
c = innerclass();
();
// (); 出错
}
}
首先创建外部内的对象,然后再用去创建内部类的对象
Outerclass q = new Outerclass();
c = innerclass();
关于这句 c = innerclass(); 还有另外一种写法操作
innerclass c = innerclass();
我试验了都没有报错,但是在《Think in Java》中作者要求写法是第一种:.
2)、内部类继承自某个类,这个时候可以在OuterClass中添加一个方法返回一个Innerclass类型的对象。
interface Select{
}
public class Outerclass {
private String name;
public void Stingto(String ident) {
(ident);
}
public class innerclass implements Select{
public void to() {
(name);
}
}
public innerclass innerclass() {
return new innerclass();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String identname = "tuo";
Outerclass q = new Outerclass();
c = ();
();
}
}
这里仍然需要去创建一个外部类的对象,然后通过使用 innerclass innerclass() 创建外部类的对象。
总结:
1.内部类是外部类的一部分,如果不是静态内部类的话(这表明内部类和外部类是有关联的)就必须通过创建对象来操作(这也是我们在创建内部类的对象的时候需要先创建外部类的对象)
2.内部类也是外部类的一部分,所以他也可以使用外部类的所有元素数据,但是你不能在 public static void main(String[] args) 里通过创建对象使用外部类的元素数据,此时你只能使用内部类自 己的数据方法(可见第一部分代码)。
2.静态内部类
1)、常规情况
/*
* interface Select{
}
*/
public class Outerclass {
private String name = "tuo";
public void Stingto(String ident) {
(ident);
}
public void print() {
(name);
}
public static class innerclass {
public void to() {
// (name);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String identname = "tuo";
innerclass q = new innerclass();
}
}
2)、内部类继承自某个类,这个时候可以在OuterClass中添加一个方法返回一个Innerclass类型的对象。
interface Select{
}
public class Outerclass {
private String name = "tuo";
public void Stingto(String ident) {
(ident);
}
public void print() {
(name);
}
public static class innerclass implements Select{
public void to() {
// (name);
}
}
public innerclass innerclass() {
return new innerclass();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String identname = "tuo";
Outerclass outer = new Outerclass();
// inner = innerclass();
innerclass inner = ();
innerclass c = new innerclass();
();
}
}
1.静态内部类由于 static 的特性,使得它在两种情况下可以直接创建对象,同时也可以在第二种情况下通过方法 innerclass innerclass() 创建对象。
2.在内部类里面,它也失去了使用外部类数据方法的特点。
3.这里主要的原因是当声明一个事物是 static 时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起,所以,即使从未创建某个类的任何对象,也可以调用其 static 方法或者访问 其 static 域。
如果觉得对你有帮助,点个赞再走吧!!!