多态
即同一方法可以根据发送对象的不同而采用多种不同的行为方式
一个对象的实际类型是确定的 但可以指向对象的引用类型有很多
/*可以指向的引用类型不确定了 父类的引用指向子类
子类 能调用的方法都是自己的或者继承父类的
父类 可以指向子类 但是不能调用子类独有的方法
对象能执行哪些方法 主要看对象左边的类型 和右边关系不大*/
Student s1 = new Student();
Person s2 = new Student();
s1.eat();
((Student) s2).eat();
//----------------
public class Person{}
//----------------
public class Student extends Person{
public void eat(){}
}
注意事项
-
多态是方法的多态 属性没有多态
-
父类和子类;有联系。否则类型转化异常 ClassCastException
-
存在条件:继承关系+方法需要重写+父类引用指向子类对象 Father f = new Son();
不能重写类型
1.static 方法属于类 不属于实例
2.final 常量
3.private方法
instanceof与类型转换
1.父类引用指向子类对象
2.把子类转换为父类 向上转型 (可能会丢失一些已有的方法
3.把父类转换为子类 向下转型 强制转换
4.方便方法的调用 减少重复的代码 简洁
Static关键字
静态随着类的生成而生成
private static int age;// 静态变量
private int age2//非静态变量
//静态代码块 对象一旦创建第一个执行 且只会执行一次 (附初始值)
static {
System.out.println("第一个执行"):
}
//
{
//匿名代码块
}
//静态导入包
import statc java.lang.Math.PI
抽象类
抽象类中可以没有抽象方法 抽象方法一定在抽象类中
public abstract void run(); //没有方法的实现
抽象类的所有方法 ,继承了它的所有子类都必须实现它的方法
(单继承的约束性)
1.不能new出抽象类 只能靠子类去实现
2.抽象类里可以有普通的方法
public abstract class A{
public abstract void run();
public void go(){
//TODO
}
}
接口
只有规范 自己无法写方法 专业的约束 约束和实现分离
关键字 interface
//接口中的所有定义都是抽象的
public interface B{
/*public abstract*/ void run();
}
接口都需要有实现类
public class A implements B,C//多继承
{
//实现接口的类 就必须实现接口的方法
@Override
public void run(){
//TODO
}
}
注意事项
-
约束
-
定义一些方法 让不同的人实现
-
方法都是 public abstract
-
常量都是 public static final
-
借口不能被实例化 接口中没有构造方法
-
implements可以实现多个接口
-
必须要重写接口中的方法
异常Exception
异常指程序运行中出现的不期而至的各种状况
分类
检查性异常
用户错误或问题引起的异常
运行时异常
可能被程序员避免的异常
错误
脱离程序员控制的问题
异常体系结构
java把异常作为对象处理
定义java.lang.Throwable作为所有异常的超类
通常分为错误Error和异常Exception
异常处理机制
抛出异常
捕获异常
关键字:try catch finally throw throws
try {
//监控区域
}catch(Exception e/*想要捕获的异常类型 最高级Throwable*/){
//捕获异常
}finally{
//善后工作
//可省略
}
若要捕获多个异常 要从小到大捕获
Ctrl+Alt+T
throw new Exception
//假设在方法中 处理不了这个异常 方法上抛出异常
自定义异常
-
创建自定义异常类
-
在方法中通过throw关键字抛出异常对象
-
如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步
-
在出现异常方法的调用者中捕获并处理异常