您当前的位置:《Java语言程序设计》听课笔记:20
《Java语言程序设计》听课笔记:20
赋值相容原理:
 
e.g:
class A
{void f(){System.out.println("AA");}
}
class B extends A
{void f(){System.out.println("BB");}
}
class D
{public static void main(String args[])
{A a=new B();
a.f();//BB
//B b=new A();非法
}}
e.g:class A
{void f(){System.out.println("AA");}
void g(A c){c.f();}
}
class B extends A
{void f(){System.out.println("BB");}}
class D
{public static void main(String args[])
{A a=new A();
B b=new B();
a.g(b);//BB
}}
e.g:class A{int x=2;void f(){System.out.println("AA");}}
class B extends A
{void g(){System.out.println("bb");}
void f(0{System.out.println("BB");}
}
class D extends A
{int x=4;}
class E
{public static void main(args[])
{A a=new B();
a.f();//BB
//a.g();非法
a=new D();
System.out.println(a.x);//2
}}
赋值相容时,如果是方法则调用子类的,如果是变量则调用父类的
6-4 fianl ,abstract
。final 修饰变量,该变量只能读,不能写,常量
只能赋值一次。通常用static与final一起使用来定义一个常量
e.g: static fianl int A=2;
class A
{static fianl int K=3;
fianl M=2;
fianl String N="java";
}
class B
{public static void main(String args[])
{A a=new A();
System.out.println(a.N+a.M);//java2
//a.M=4;非法
System.out.println(A.k);//3
}}
.fianl 修饰对象:该对象的引用不能再指向其他对象,但它所指对象的成员仍然可以改变
e.g:
class A
{int x=2;}
class B
{public static void main(String args[])
{fianl A a=new A();//a.x=2
a.x=3;
System.out.println(a.x);//3
//a=new A();非法
}}
。fianl修饰方法:该方法不能被覆盖,最终方法
Java中,static和private方法也不能被覆盖
但final方法可以被重载
e.g:
class A
{final void f(){System.out.println("AA");}
}
class B extends A
{//void f(){System.out.println("BB");}非法
void f(int x){System.out.println("BB"+x);}
}
class D
{public static void main(String args[])
{B b=new B();
b.f();//AA
b.f(2);//BB2
}}
.final 修饰类:该类不能被继承,最终类
不能做父类
final类中的成员方法都被系统默认为是final方法;
e.g:
final class A
{void f(){System.out.println("AA");}}
//class B extends A{}非法
class D
{public static void main(String args[])
{A a=new A();
a.f();//AA
}}
abstract类必须被继承派生
abstract方法必须被覆盖,抽象方法,为其所有的子类定义一个统一的接口界面只需声明而不需要实,实现由其派生类提供
抽象方法在子类中必须被实现,否则子类继承的仍是抽象方法
构造方法,静态方法(即类方法)和私有方法不能定义为抽象方法
abstract不能与private,static,final或native并列修饰同一个方法
abstract class A
{abstract void f();
void g(){System.out.println("AA");}
}
class B extends A
{void f(){System.out.println("BB");}
}
class D
{public static void main(String args[])
{A a=new B();
a.f();//BB
a.g();//AA
}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
收藏状态
收藏本课程的同学
相关课程