1.子类实例化时会先实例化父类(调用父类构造方法)
2.方法覆写 权限级别 private<default<public (private 父类定义,子类重写后都是新方法)
方法重载与覆写区别
NO | 比较点 | 重载 | 覆写 |
1 | 英文单词 | OverLoad | OverWrite |
2 | 概念 | 方法名称相同,参数类型或个数不同 | 方法名称、参数类型或个数完全相同 |
3 | 注意点 | 访问权限不能变小 | |
4 | 范围 | 在同一个类中性中 | 在继承类中发生 |
package org.poldemo;
class A{
public void fun1(){
System.out.println("A类 fun1")
}
public void fun2(){
fun1();
}
}
class B extends A{
public void fun1(){
System.out.println("B类fun1");
}
public void fun3(){
System.out.println("B类fun3");
}
}
public class PolDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
B b = new B();
b.fun2();
A a = new B(); //向上传型 子类实例-->父类实例
a.fun2();
B b2 = (B)a; //向下强制转型
b2.fun2();
b2.fun3();
}
}
常见异常:
classcastexception:表示类转换异常,造成的根本原因是两个没关系的类进行相互的对象转换操作
nullpointerexception:实例未初始化 导致空异常
多态的应用场景:
package org.poldemo;
class A{
public void fun1(){
System.out.println("A类 fun1");
}
public void fun2(){
fun1();
}
}
class B extends A{
public void fun1(){
System.out.println("B类fun1");
}
public void fun3(){
System.out.println("B类fun3");
}
}
class C extends A{
public void fun1(){
System.out.println("C类fun1");
}
public void fun4(){
System.out.println("C类fun4");
}
}
public class PolDemo01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
fun(new B());
fun(new C());
}
public static void fun(A a){
a.fun2();
if (a instanceof B){
B b = (B)a;
b.fun3();
}
if (a instanceof C){
C c = (C)a;
c.fun4();
}
}
}