- 抽象类
描述一类事物的时候,发现确实存在某种行为,但是目前这种行为不具体,这时候应该抽取这种行为的声明,而不去实现这种行为,这时候这种行为我们成为抽象行为,这时候应该使用抽象类。
要注意的细节:
① 如果一个方法没有方法体,那么该方法必须使用abstract修饰。
② 如果一个类函数有抽象方法,那么这个类肯定是一个抽象类或接口。
③ 抽象类不能创建方法,抽象类是含有构造方法的。
④ 抽象类可以存在非抽象方法与抽象方法。
⑤ 抽象类可以不存在抽象方法。
⑥ 非抽象类继承抽象类的时候,必须要把抽象类中所有抽象方法全部实现。
⑦ abstract不能与以下关键字一起使用,static,private,final
- 接口
接口的定义格式:
Interface 接口名{
成员变量
成员函数….
}
接口的作用:
① 程序的解耦
② 定义约束的规范
③ 拓展功能
接口要注意的细节
① 接口中的成员变量都是常量,默认的修饰符是public static final。
② 接口中的方法全部都是抽象方法,默认的修饰符:public abstract。
③ 接口不能创建对象。
④ 接口是没有构造函数的。
⑤ 非抽象类通过implements实现接口的时候,必须要把接口中所有方法全部实现。
接口与类之间的关系:实现关系
注意:一个类可以实现多个接口。
接口与接口之间的关系:继承关系
注意:一个接口可以继承多个接口。
- 多态,父类的引用类型变量指向了子类的对象,或者是接口的引用类型变量指向了接口实现类的对象。
要注意的细节
① 多态情况下,如果子父类存在同名的成员变量时,访问的是父类的成员变量。
② 多态情况下,如果子父类存在同名的非静态函数时,访问的是子类的成员变量。
③ 多态情况下,如果子父类存在同名的静态函数时,访问的是父类的成员变量。
④ 多态情况下,不能访问子类特有的成员。
多态的应用:
① 多态用于形参类型的时候,可以接收更多类型的数据。
② 多态用于返回值类型的时候,可以返回更多类型的数据。
二 强制类型转换:
1.来源:由于目前多态情况下不能访问子类特有的成员。
2.如果需要访问子类特有的成员,那么需要进行类型强制转换。
小数据类型----------->大的数据类型 自动类型转换
大数据类型------------>小的数据类型 强制类型转换 小数据类型
变量名=(小数据类型)大数据类型;
3.引用数据类型的转换
小数据类型----------->大的数据类型 自动类型转换
大数据类型------------>小的数据类型 强制类型转换
类型转换最常见的问题;java.lang.ClassCastException。强制类型转换失败。
If(a instanceof Fish)
接口 变量=new 接口实现类的对象
三 内部类
定义:一个类定义在另一个类的内部,那么该类就称作为内部类。
内部类的class文件名:外部类$内部类。便于区分该class文件是属于哪个外部类的
内部类的类别:
- 成员内部类:
成员内部类的访问方式:
方式一在外部类提供一个方法创建内部类的对象进行访问。
方式二:在其他类直接创建内部类的对象。格式:外部类。内部类 变量名
=new 外部类().new内部类()。
注意:如果是一个静态内部类,那么在其他类创建的格式:
外部类.内部类 变量名=new 外部类.内部类();
内部类的应用场景:我们在描述A事物的时候,发现描述的A事物内部还存在另外一个比较复杂的事物B的时候,而且这个比较复杂事物B还需要访问A事物的属性等数据,那么这时候我们就可以使用内部描述B事物。
- 局部内部类
在一个类的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。
注意:
如果局部内部类访问了一个局部变量,那么该局部变量必须使用final修饰。
- 匿名内部类
① 定义:没有类名的类就称为匿名内部类。
② 好处:简化好写。
③ 使用前提:必须存在继承或者实现关系才能使用。
匿名内部类一般用于实参
四Throwable以及错误
异常:
Throwable分为error和exception,exception又分为运行异常和编译时异常 1..throwable常用的方法
tostring() 返回当前对象的完整类名 +病态信息。
Throwable t=new Throwable();
String info = t.tostring();
System.out.println(“tostring:”+info);//java.lang.Throwable 包类+类名=完整类名
getMessage() 返回的是创建Throwable传入的字符串信息。
Throwable t=new Throwable(“头晕,感冒….”);
String message = t.getMessage ();
System.out.println(“tostring:”+info);//java.lang.Throwable
System.out.println(“getMessage:”+message);
printstackTrace() :打印异常的栈信息。
1.1error:错误一般是用于jvm或者是硬件引发的问题
1.2Exception异常 是需要代码去处理
如何区分error与Exception
如果程序出现不正常的信息,如果不正常的信息以error肯定是一个错误,
如果是以Exception结尾,那么肯定就是一个异常。
1.3异常的处理:
方式一:捕获处理。
捕获处理的格式:
try{
可能发生异常的代码;
}catch(捕获的异常类型 变量名)
{处理异常的代码
}
1.3.1捕获处理要注意的细节:
① 如果try-catch块外面的代码可以正常执行。
② 如果try块中出了异常代码,那么在try块中出现异常代码后面的代码是不会执行的。
③ 一个try块后面可以跟多个catc模块的。
1.4方式二:抛出处理。
① 如果一个方法的内部抛出了一个异常对象,那么必须在方法上声明抛出。
② 如果调用了一个声明抛出异常的方法,那么调用者必须处理异常。
③ 如果一个方法内部抛出了一个异常对象,那么throw语句后面的代码都不会再执行了
④ 在一种情况下,只能抛出一种类型异常对象。
1.4.1 throw与throws两个关键字:
② throw关键字是用于方法内部的,throws是用于方法声明上的。
②throw 是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明上声明抛出异常类型的。
③ Throws关键字后面只能有一个异常对象,throws’后面一次可以声明抛出多种类型的异常