多态性
方法的重载与重写
对象的多态性
向上转型:程序会自动完成——子类向父类转换,相当于从子类中调取父类成员,筛选
父类 父类对象 = 子类实例;
向下转型:强制类型转换
子类 子类对象 = (子类)父类实例
class A{
public void tell1() {
System.err.println("A--tell1");
}
public void tell2(){
System.out.println("A--tell2");
}
}
class B extends A{
//对tell1重写
public void tell1() {
System.out.println("B--tell1");
}
public void tell3(){
System.out.println("B--tell3");
}
}
public class test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//向上转型——子类向父类转换,相当于从子类中调取父类成员,筛选
A a = new B();
a.tell1();//B(子类)中的tell1重写了A(父类)中的tell1,所以打印"B--tell1"
a.tell2();
//向下转型——强制类型转换,先发生向上转型,才能发生向下转型;
//通过父类筛选,之后将结果输出到另一个子类。~~像一个筛子。
A a1 = new B();//
B d = (B)a1;
d.tell1();//打印“B--tell1”
d.tell2();//
d.tell3();
}
}
对象多态性的使用
class A1{
public void tell1() {
System.out.println("A--tell1");
}
}
//继承自A1
class B1 extends A1{
public void tell2() {
System.out.println("B--tell2");
}
}
//继承自A1
class C1 extends A1{
public void tell3() {
System.out.println("C--tell3");
}
}
public class test3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//由子类访问父类成员
say(new B1());//向上转型,程序自动完成
say(new C1());//向上转型,程序自动完成
}
public static void say(A1 a) {
a.tell1();
}
}
instanceof关键字
instanceof关键字判断一个对象到底是不是一个类的实例。返回boolean类型
class A1{
public void tell1() {
System.out.println("A--tell1");
}
}
//继承自A1
class B1 extends A1{
public void tell2() {
System.out.println("B--tell2");
}
}
//继承自A1
class C1 extends A1{
public void tell3() {
System.out.println("C--tell3");
}
}
public class test3 {
public static void main(String[] args) {
// instanceof关键字判断一个对象到底是不是一个类的实例
A1 a = new A1();
System.out.println(a instanceof A1);//ture
B1 b = new B1();
System.out.println(b instanceof B1);//ture
System.out.println(b instanceof A1);//ture
a = b;//向上转型
System.out.println(a instanceof A1);//ture
System.out.println(a instanceof B1);//ture
}
}
抽象类的应用
接口的应用