本博文将讲述类的继承和多态的相关情况。
在面向对象程序设计中,可以从已有的类派生出新类,这称为继承。继承是Java在软件重用方面一个重要且功能强大的特征。假设要定义一个类,对圆、矩形和三角形建模。这些类有很多特性。设计这些类来避免冗余并使系统更易于理解和维护的最好办法就是继承。
在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。归结为一句话:允许将子类类型赋值给父类类型,这有别与C++中的多态(通过虚函数实现)。
范例一:继承多态基本概念用法练习。
运行效果如图:
其实现的源代码如下所示:(其中包括自定义一个堆栈类MyStack的实现)
package Blog;
import java.util.Date;
public class blogTryProject{
public static void main(String[] args) {
//父类与子类
TestCircleRectangle tcr = new TestCircleRectangle();
tcr.main(args);
//动态绑定
System.out.println("\n动态绑定实例演示");
m(new GraduateStudent());
m(new Student());
m(new Person());
m(new Object());
//继承与多态
System.out.println("\n多态和类型转换演示");
CastingDemo cd = new CastingDemo();
cd.main(args);
//ArrayList数组线性表
System.out.println("\nArrayList数组线性表");
TestArrayList tal = new TestArrayList();
tal.main(args);
}
public static void m(Object x){
System.out.println(x.toString());
}
}
//MyStack自定义栈类
class MyStack{
private java.util.ArrayList list = new java.util.ArrayList();
public boolean isEmpty(){
return list.isEmpty();
}
public int getSize(){
return list.size();
}
public Object peek(){
return list.get(getSize() - 1);
}
public Object pop(){
Object o = list.get(getSize() - 1);
list.remove(getSize() - 1);
return o;
}
public void push(Object o){
list.add(o);
}
public int search(Object o){
return list.lastIndexOf(o);
}
public String toString(){
return "Stack: "+list.toString();
}
}
//ArrayList数组线性表
class TestArrayList{
public static void main(String[]args){
java.util.ArrayList cityList = new java.util.ArrayList();
cityList.add("London");
cityList.add("Denver");
cityList.add("Paris");
cityList.add("Miami");
cityList.add("Seoul");
cityList.add("Tokyo");
System.out.println("List size? "+cityList.size());
System.out.println("Is Miami in the list ? "+cityList.contains("Miami"));
System.out.println("The location fo Denver in the list ?"+cityList.indexOf("Denver"));
System.out.println("Is the list empty? "+cityList.isEmpty());
cityList.add(2, "Xian");
cityList.remove("Miami");
cityList.remove(1);
System.out.println(cityList.toString());
for(int i = cityList.size() - 1;i >= 0;i--)
System.out.print(cityList.get(i)+" ");
System.out.println();
java.util.ArrayList list = new java.util.ArrayList();
list.add(new Circle1(2));
list.add(new Circle1(3));
System.out.println("The area of the circle? "+((Circle1)list.get(0)).getArea());
}
}
//多态和类型转换
class CastingDemo{
public static void main(String[]args){
Object object1 = new Circle1(1);
Object object2 = new Rectangle1(1,1);
displayObject(object1);
displayObject(object2);
}
public static void displayObject(Object object){
if(object instanceof Circle1){
System.out.println("The circle diameter is "+((Circle1)object).getDiameter());
System.out.println("The circle area is "+((Circle1)object).getArea());
}
else if(object instanceof Rectangle1){
System.out.println("The rectangle area is "+((Rectangle1)object).getArea());
}
}
}
//动态绑定实例
class DynamicBindingDemo{
public static void main(String[]args){
}
}
class GraduateStudent extends Student{
}
class Student extends Person{
public String toString(){
return "Student";
}
}
class Person extends Object{
public String toString(){
return "Person";
}
}
//父类子类继承及其使用
class TestCircleRectangle{
public static void main(String[]args){
System.out.println("父类子类继承及其使用");
Circle1 circle = new Circle1(5);
System.out.println("A circle "+circle.toString());
System.out.println("The radius is "+circle.getRadius());
System.out.println("The area is