标签:
高级类特性
Staitc:关键字,用于修饰类的成员(属性、方法、内部类)。
例如每一个中国人都共享这个国家的名称,不需要为每个中国人的实例对象中单独分配一个用于代表国家名称的变量。
设计模式:像经典的棋谱,不同的棋局用不同的棋谱,免去我们自己再去思考和探索
单子设计模板:也就是类的单态设计模式,即采取一定的办法保证软件系统中,对某一个类只能存在一个对象实例。
具体的操作:
Eg:
private static person p=new person();
Public static person getp(){ return p};
Final:关键字,可以修饰类、属性和方法,表示最终的。
1.Final修饰的属性是最终的属性,所以不能修改,即常量
2.Final修饰的方法是最终的方法,所以不能修改,即不能重写
3.Final修饰的类是最终的类,所以不能扩展,即不能继承
注意:
必须在声明时被初始化,可以在非静态代码块中,或在构造器中来初始化
Eg:
Class a{
Final int age;{age=12;}//静态代码块中初始化
Final string name=“”;//string类型加上引号
Final int sex;
Aa(){sex=1;}}//在构造器中初始化
Abstract:关键字,用于修饰类和方法。
注意:
1.有抽象方法的类一定是抽象类,但抽象类中可以没有抽象方法
2.不能用abstract修饰私有方法、构造方法、静态方法
用法:
1)抽象类不可实例化
2)具体的类通过继承抽象类的方式,创建子类的实例
3)当子类继承抽象类以后,要重写抽象类的抽象方法
4)子类必须重写抽象类及其父类的所有的抽象方法,方可实例化。如果不重写,输出的则是抽象类中默认的方法。抽象类继承抽象类可以不用写抽象方法,已经继承了。
public class TestAbstract {
public static void main(String[] args) {
Person p1 = new Student();//多态
p1.talk();
p1.work();
应用场景:
接口:有时候必须从几个类的中派生出一个子类,继承他们所以的属性和方法。但是Java中不支持多重继承,即只能有一个父类。有了接口,就可以实现多继承。
接口定义了某一些类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供某些方法。
从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
常量的命名规范:多个单词组成,每个字母需要大写,且每个使用_连接。
修饰符 class 类名 extends 父类implements 接口1,接口2。。。
{类体部分 ,如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法}
注意:
总结:
staitc是为了共享属性、方法和内部类,可以不用实例化通过类名.的方式访问。
单子模式是只能有一个对象实例,但是不能在类外面实例化,只能在内部实例化,所以先私有化构造器,再私有化属性,并提供get方法。前边都用static,实例也要用stait,比如
private static person p=new person();
Abstract修饰的方法抽象方法是没有方法体的,修饰的类抽象类是不能实例化的。抽象类是知道有哪些方法,但具体如何实现交给子类。
接口是只有抽象方法和常量的抽象类,它可以实现多继承,它不关心细节,只需提供必须有的东西。
内部类:在类的内部定义的类
①对于非静态内部类:必须先创建外部类对象,然后再创建内部类对象
OuterClass oc=new OutClass();
InnerClass ic=oc.new InnerClss();
ic.test();
②静态内部类:内部使用static来修饰,所以创建该类的对象可以没有外部类对象
StaticInnerClass sic=new Outclass.StaticInnerClass;
2.内部类通过以下方式访问外部类的成员变量
Private int i=1;//外部类的成员变量
Class innerclass{
Private int i=2;
Private string innername=”def”
Public void tese(){
Int i=3;
Sysout(i);//3
Sysout(this.i);//2
Sysout(outclass.this.i);
//1 如果外部成员变量是int a=1,这里直接写就行
Sysout(outername);
Sysout(innername);
//访问方法时正常访问即可
}
}
注意:静态内部类中的方法不能访问外部内的非静态成员
在类的内部直接创建一个接口的实现类对象
Eg:
New IplayGame(){
Public void playGame(){
Sysout(用匿名内部类实现接口)}
}.playGame();
也可以在类的内部这样写:
IplayGame ip= new iplayGame(){
Public void playGame(){
Sysout(“使用匿名内部类实现接口”)}};
Ip.playGame();//通过这样访问这个方法
标签:
原文地址:http://www.cnblogs.com/liuyu0529/p/4911668.html