面向对象程序基础九
来源:互联网 发布:修改数据库字段备注 编辑:程序博客网 时间:2024/05/22 06:08
对象的多态性:
子类对象与父类对象之间的转换
1、 子类对象向父类对象转换(向上转型)
自动转型(父类对象=子类对象)
2、 父类对象向子类对象转换(向下转型)
强制转型(子类对象=(子类)父类对象)
多态性:
1、 方法的多态性(重载):同一个方法名称根据传入参数的不同,完成的功能不同
2、 对象的多态性
面向对象程序开发的一个思路:[建议]永远不去继承一个普通类
对象多态性是在继承应用上的一种扩展,所以程序要先有继承关系才能够去使用多态性
class A
{
public void fun1()
{
System.out.println("1、 A ----public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、 B ----public void fun2()");
}
public void fun3()
{
System.out.println("3、 B ----public void fun3()");
}
}
public class javaoo04
{
public static void main(String []args)
{
B b = new B();
b.fun2();
b.fun3();
}
}
2、 B ----public void fun2()
3、 B ----public void fun3()
如果一个方法被子类覆写了,则子类与父类之间发生转换时,自动去调用已经补覆写过的方法(子类中的方法)。
class A
{
public void fun1()
{
System.out.println("1、 A ----public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
//覆写了fun1()方法
public void fun1()
{
System.out.println("2、 B ----public void fun1()");
}
//增加了一个fun3()方法
public void fun3()
{
System.out.println("3、 B ----public void fun3()");
}
}
public class javaoo04
{
public static void main(String []args)
{
A a = null;
a = new B();
//A a = new B(); //子类对象为父类实例化
B b = (B)a;
a.fun2(); //fun1()中的方法被覆写了。
//a.fun3(); //javaoo04.java:74: 找不到符号
b.fun2();
}
}
2、 B ----public void fun1()
2、 B ----public void fun1()
class A
{
public void fun1()
{
System.out.println("1、A----public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、B----public void fun3()");
}
}
public class javaoo04
{
public static void main(String []args)
{
A a = new A();
a.fun2();
B b = (B)a; //Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B at javaoo04.main(javaoo04.java:107)
}
}
class A
{
public void fun1()
{
System.out.println("1、A ---public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、B ---public void fun1()");
}
public void fun3()
{
System.out.println("3、B ---public void fun3()");
}
}
public class javaoo04
{
public static void main(String []args)
{
//一个print方法,此方法可以接收A和B类的对象,并调用方法打印
//如果是A类对象,则调用fun2()方法
//如果是B类对象,则调用fun2()和fun3()两个方法
print(new B());
//如果A类还有20个子类,会怎么样? 则此方法 还要写20遍
}
public static void print(A a)
{
a.fun2();
}
public static void print(B b)
{
b.fun2();
b.fun3();
}
}
//2、B ---public void fun1()
//3、B ---public void fun3()
class A
{
public void fun1()
{
System.out.println("1、A ---public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、B ---public void fun1()");
}
public void fun3()
{
System.out.println("3、B ---public void fun3()");
}
}
public class javaoo04
{
public static void main(String []args)
{
//一个print方法,此方法可以接收A和B类的对象,并调用方法打印
//如果是A类对象,则调用fun2()方法
//如果是B类对象,则调用fun2()和fun3()两个方法
print(new B());
//如果A类还有20个子类,会怎么样? 则此方法 还要写20遍
}
public static void print(A a)
{
a.fun2();
B b = (B)a;
b.fun3();
}
public static void print(B b)
{
b.fun2();
b.fun3();
}
}
//2、B ---public void fun1()
//3、B ---public void fun3()
class A
{
public void fun1()
{
System.out.println("1、A ---public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、B ---public void fun1()");
}
public void fun3()
{
System.out.println("3、B ---public void fun3()");
}
}
class C extends A
{
public void fun1()
{
System.out.println("4、B---public void fun1()");
}
public void fun4()
{
System.out.println("5、B---public void fun4()");
}
}
public class javaoo04
{
public static void main(String []args)
{
//一个print方法,此方法可以接收A和B类的对象,并调用方法打印
//如果是A类对象,则调用fun2()方法
//如果是B类对象,则调用fun2()和fun3()两个方法
print(new A());
//如果A类还有20个子类,会怎么样? 则此方法 还要写20遍
}
public static void print(A a)
{
a.fun2();
//缺少一个对象是否是某一个类的实例的判断
B b = (B)a;
b.fun3();
}
public static void print(B b)
{
b.fun2();
b.fun3();
}
}
//javaoo04.java:278: 需要为 class、interface 或 enum
两个常见的错误:
ClassCastException(两个对象之间没有任何关系而进行转换)、
NullPointerException
Instanceof 关键字
作用: 1、对象instanceof 类
Eg:如果对象a 是类B的例则返回true .反之则返回flase
class A
{
}
class B extends A
{
}
public class javaoo04
{
public static void main(String []args)
{
A a = new A();
System.out.println(a instanceof A); //trie
System.out.println(a instanceof B); //false
}
}
对象多态性最核心的部分就是方法的覆写与继承的关系,只要有继承关系,只要有覆写过的方法,则子类向父类进行转型时,肯定调用被子类覆写过的方法(核心)。
class A
{
public void fun1()
{
System.out.println("1、A --- public void fun1()");
}
public void fun2()
{
this.fun1();
}
}
class B extends A
{
public void fun1()
{
System.out.println("2、B --- public void fun1()");
}
public void fun3()
{
System.out.println("3、B --- public void fun3()");
}
}
class C extends A
{
public void fun1()
{
System.out.println("4、C --- pubic void fun1()");
}
public void fun4()
{
System.out.println("5、C --- public void fun4()");
}
}
public class javaoo04
{
public static void main(String []args)
{
print(new B());
}
public static void print(A a)
{
a.fun2();
if (a instanceof B)
{
B b = (B)a;
b.fun3();
}
if (a instanceof C)
{
C c = (C)a;
c.fun4();
}
}
}
接口与抽象类的实际应用(基础类、封装、继承、覆写、多态性)
- 面向对象程序基础九
- 《面向对象基础:C++实现》学习笔记之九
- java基础整理九(面向对象5)
- Android之JAVASe基础篇-面向对象-IO(九)
- 后台开发学习(九)PHP面向对象基础
- javascript面向对象(九)
- 面向对象版表达式(九)
- (九)、面向对象初步
- Python(九) 面向对象
- 黑马程序眼_Java基础(2)面向对象(一)
- Java基础6--面向对象--程序运行内存图解
- 面向对象(面向基础)
- 九种不够面向对象的对象
- 九中不够面向对象的对象
- 前端基础进阶(九):详解面向对象、构造函数、原型与原型链
- 面向对象技术基础
- 面向对象的基础
- 面向对象基础
- 面向对象基础八
- 软件实施
- 比较
- SqlServer 2005常见问题及解决方案
- 欢迎大家来我的小屋逛逛哦
- 面向对象程序基础九
- 嵌入式linux网络编程之connect()函数的高级应用
- C#中使用正则表达式验证Email格式、IP地址格式和URL网址格式
- 心情短语
- 又要放假了
- mini 2440的test 的串口操作[转]
- WebService原理
- js验证表单大全
- [转 ] IT技术未来方向