抽象类、抽象方法和内部类

在java中有个比较6的类,为什么说它很6呢?继承该类要么也是和它一样要么必须实现该类中所有的方法,这个类叫抽象类
定义抽象类:
访问控制符 abstract 类名{
访问控制符 [abstract] 返回值类型 方法名();
}
再强调一下,抽象类被abstract修饰,其实在抽象类中定义的方法用abstract修饰的方法叫抽象方法。具有抽象方法的类一定是抽象类。抽象类中可以没有抽象方法。抽象方法只有声明部分没有具体的方法体,意思就是,只下命令,让继承该类的子类执行命令。
注意
抽象类的子类必须实现抽象类中所有的抽象方法,否则子类也必须是抽象类。
抽象类不能直接实例化,不能使用关键字new来创建该抽象类的对象。
抽象类不能被final修饰(被final修饰的类不能被子类继承)
抽象类不能被static修饰(该抽象方法没有方法体,即使可以使用类名调用该方法,但也不具有利用价值)
抽象类中的抽象方法是多态的一种表现形式(继承抽象类的不同子类,在子类中用抽象类对象引用不同子类对象调用相同的方法,表现出的行为特征不同)
简单来说接口是抽象类的集合
定义方式:
访问控制符 interface 接口名 [extends 接口列表]{
[常量]
抽象方法
}
看定义方式可以看出接口可以继承多个接口,实现多继承,弥补了类单一继承的缺点,而且接口中只有常量和抽象方法,从接口的定义也可以看出接口是抽象方法的集合,肯定只有抽象方法啦!
注意:
接口的访问控制符只能是public和友好的
接口中的抽象方法的访问控制符只能是public
接口中还可以定义内部类
接口中没有抽象方法,不能创建自己的方法,但可引用实现类的对象,这个现象叫接口回调。
类通过implements关键字实现接口,类只能单继承,但可以继承多个接口
访问控制符 修饰符 class 类名 implements 接口1[接口2···]{


}
注意:
多个接口中方法名相同的方法在实现类中只实现其中一个。
接口实现类没有实现接口中全部的抽象方法,则这个类必须是抽象类。

抽象类中和接口中都可以定义内部类,很明显内部类就是在类的内部定义的一个类。
内部类的分类:
1、按照是否有名分为有名内部类和匿名内部类
有名内部类:
public class Text {


class Text1{

}

}
注意:有名内部类跨外部类使用时,内部类所在的类不能在默认包中。
匿名内部类:
public class Test {

Text text=new Text(){

};
}
匿名内部类必须创建该类的一个对象定义内部类,其不能单独存在。
特点:
匿名内部类没有构造方法(没有类名,不能创建匿名内部类的对象)
匿名内部类不能是抽象类(因为没有类名所以不能被继承,抽象类若不能被继承就没有意义)
2、按是否有static修饰分为静态内部类和非静态内部类,静态内部类只能定义在外部类中,不能定义在方法或代码块中。
静态内部类:静态有名内部类和静态匿名内部类
非静态内部类:非静态有名内部类和非静态匿名内部类
非静态有名内部类创建对象要先创建外部类的对象,通过外部类的对象创建内部类对象。
静态有名内部类可以直接创建内部类的对象。
内部类肯定与外部类相比有一定的特别性,到底有什么呢?

1、内部类是一个独立的类,编译后生成.class文件,有名内部类则文件名为外部类类名+$+内部类leiming,匿名内部类则文件名为外部类类名+$+数字


2、内部类可以定义在类中、方法或代码块中。静态内部类只能定义在外部类中,不能定义在方法或代码块中。
直接定义在类中的内部类访问控制符有:public、protected、默认的和private(外部类,抽象类和接口只能用public和default)修饰符有:static,
定义在方法或代码块中的内部类不能有访问修饰符修饰,也不能有static修饰
4、内部类可以访问外部类所有访问权限的成员变量
5、在非外部类定义的内部类相当于局部变量,适用范围从定义开始到所在语句块结束,这时候的内部类需要使用局部变量,则该局部变量必须用final修饰。
6、只有静态内部类中才能存在静态成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值