关闭

java自学笔记之抽象类,接口,对象的多态性,instanceof关键字

476人阅读 评论(0) 收藏 举报
分类:
interface A
{
全局常量;
抽象方法;
}


全局常量  final static
抽象方法  abstract


一个子类可以有多个接口(public C implements A,B{})
一个子类只能有一个父类(public C extents A{})


一个子类同时继承抽象类和实现接口
class 子类 extends 抽象类 implements 接口A,接口B{}
在使用时,一个抽象类可以实现一个接口,那么对于抽象类的子类则就必



同时覆写接口和抽象类 中的所有方法




calss 子接口 implements 接口B,接口C{}


一个抽象类可以实现多个接口 但是一个接口不能继承一个抽象类
接口中的抽象方法可以不 加入abstract关键字   但是抽象类中必须加入


abstract关键字




对象的多态性
1.向上转型:子类对象——》父类对象
对于向上转型,程序会自动完成,
格式: 父类 父类对象 = 子 类实例


注意::转型之后因为操作是父类对象,所以无法找到在子类中定义的方





2。向下转型:父类对象——》子类对象
对于向下转型时,必须明确指明要转型的子类类型
格式: 子类 子类对象 = (子类)父类实例


注意:: 想要发生向下转型那么一定要先发生向上转型,“A a = new B


()”表示建立关系


1、向上转型关系
class A 
{
public void fun1()
{
Syetem.out.println("A-->fun1");
}
public void fun2()
{
fun1();
}
}
class B extents A
{
public void fun1()
{
System.out.println("B -->fun1");
}
public void fun3()
{
System.out.println("B-->fun3");
}
}




class C extents A
{
public void fun1()
{
System.out.println("B -->fun1");
}
public void fun5()
{
System.out.println("B-->fun5");
}
}
public class Demo
{
public static void main(String args[])
{
B b = new B();
b.fun1(); //输出:B-->fun1
A a= b;//发生了向上转型关系
a.fun1();//输出:B-->fun1
a.fun2();//输出:B-->fun1
//a是父类对象 只能输出fun1和fun2 不能输出fun3
B b1 = (B)a;
b1.fun1();
b1.fun2();
b1.fun3();//这时是子类的对象 可以访问子类中定义


的方法
fun(new B());
fun(new C());//这是对象多态性的应用 






A a1 = new B();
System.out.println("A a1 = new B(),a1是A的实例?


"+(a1 instanceof A) );//true
System.out.println("A a1 = new B(),a1是B的实例?


"+(a1 instanceof A) );//true
A a2 = new A();
System.out.println("A a1 = new B(),a1是A的实例?


"+(a1 instanceof A) );//true
System.out.println("A a1 = new B(),a1是B的实例?


"+(a1 instanceof A) );//false


}
public static fun(A a)
{
a.fun1();
if(a instanceof B)
{
B b = (B)a;
b.fun3();
}
if(a instanceof C)
{
C c= (C)a;
c.fun5();
       }
}


}




使用instanceof 判断一个对象是否为一个类的实例 -->返回boolean类型


在开发中一定要注意,对于向下转型的操作最好增加验证,以保证转型时


不会发生ClassCastException
如果现在要增加新的子类,则肯定要修改fun()方法,这样一来程序就


失去了灵活性,所以在程序的开发中重点应该放在父类上,只要父类设计


的足够合理,则开发肯定会非常方便。
而且在开发中一定要记住以下一点
一个类永远不要继承一个已经实现好的类,而只能继承抽象类或


实现接口
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25528次
    • 积分:521
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:11篇
    • 译文:0篇
    • 评论:2条