java内部类和异常类1

一、Java内部类

成员变量和方法,实际上,类还有一种成员:内部类。在一个类中定义另一个类,我们把这样的类称作内部类,包含内部类的类称作内部类的外嵌类。

内部类和外嵌类之间的关系:
1)内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法。

2)内部类的类体中不可以声明类变量和类方法,外嵌类的类体中可以用内部类声明对象作为外嵌类的成员。

3)内部类仅供它的外嵌类使用,其他类不可以用某个类的内部类声明对象。

因为内部类的外嵌类的成员变量在内部类中有效,所以使得内部类和外嵌类的交互十分方便。

例如:

class RedCowForm {
    static String formName;
    RedCow cow; //内部类声明对象
    RedCowForm() {
    }
    RedCowForm(String s){
        cow = new RedCow(88,66,2000);
        formName = s;
    }
    public void showCowMess() {
        cow.speak();
    }
    class RedCow{ //内部类的声明
        String cowName = "小牛";
        int height,weight,price;
        RedCow(int h,int w,int p) {
            height = h;
            weight = w;
            price = p;
        }
        void speak() {
            System.out.println("我是"+cowName+",身高"+height+"cm,体重"+weight+"kg,生活在"+formName);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        RedCowForm form = new RedCowForm("dotcpp农场");
        form.showCowMess();
        form.cow.speak();
    }
}

在这里插入图片描述
注意:Java编译器生成的内部类的字节码文件的名字和平常的类的名字不同,内部类对应的字节码文件的名字格式是“外嵌类名$内部类名”。例如:上面例子中内部类的字节码文件的名字应该是RedCowForm$RedCow.class。

内部类可以被修饰为static内部类,static内部类是外嵌类中的一种静态数据类型,程序可以在其他类中使用static内部类来创建对象,但是,static内部类不能操作外嵌类中的实例成员变量。

二、Java匿名类

使用匿名内部类我们必须要继承一个父类或者实现一个接口。

需要注意的是:

1)匿名内部类中是不能定义构造函数的。

2)匿名内部类中不能存在任何的静态成员变量和静态方法。

3)匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

class outerClass {
    // 定义一个匿名类
    object1 = new Type(parameterList) {
        // 匿名类代码
    };
}

注意:因为匿名类是表达式形式定义的,所以末尾以分号;来结束。

  1. 匿名类继承一个父类

例如:

class Dotcpp {
    public void display() {
        System.out.println("在Dotcpp类内部");
    }
}
class AnonymousDemo {
    public void createClass() {
        //创建的匿名类继承了Dotcpp类
        Dotcpp d1 = new Dotcpp() {
            public void display() {
                System.out.println("在匿名类内部");
            }
        };
        d1.display();
    }
}
class Main {
    public static void main(String[] args) {
        AnonymousDemo an = new AnonymousDemo();
        an.createClass();
    }
}

在这里插入图片描述2. 匿名类实现一个接口

例如:

interface Dotcpp {
    public void display();
}
class AnonymousDemo {
    public void createClass() {
        //创建的匿名类实现了Dotcpp接口
        Dotcpp d1 = new Dotcpp() {
            public void display() {
                System.out.println("在匿名类内部");
            }
        };
        d1.display();
    }
}
class Main {
    public static void main(String[] args) {
        AnonymousDemo an = new AnonymousDemo();
        an.createClass();
    }
}

在这里插入图片描述学习来自“https://www.dotcpp.com/course/801”

总结

从前车马很慢,一生只能爱一个人。-木心

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值