Java面向对象(220)面向对象的特点3

一. 多态数组:

  1. 多态数组:多态在Java应用程序中被广泛使用。多态数组是多态的用途之一。
  2. 多态数组—在引用类型的数组中,使用多态形式存放对象。
  3. 例:要求创建五个年龄不等的Person、Student和Teacher对象,并将他们按年龄排序输出,应当如何实现?(Person父类 , Student和Teacher是子类)
public class Test{
		public static void main(String[] args){
Person[] person = { new Person(“张三”,32),
							new Student(“李四”,21,120,90.0),
							new Student(“王五”,25,110,91.5),
							new Teacher(“刘老师”,35),
new Teacher(“王老师”,40)};
				for(int i=0;i<person.length-1;i++){
					for(int j=i+1;j<person.length-1;j++){
		if(person[i].getAge()<person[j].getAge()){
	Person p = person[i];
	Person[i] = person[j];
	Person[j] = p;
}
}
}
}
}
  1. 因为computer和pc和notepad是子父类关系所以可以放到computer数组中。所有对象都可以放到object数组中。
public class Test{
		public static void main(String[] args){//Computer为父类,Notepad,PC为子类
	Computer c1 = new Computer();
	NotePad n1 = new NotePad();
				PC p1 = new PC();
				Computer c2 = new PC();
				Computer c3 = new NotePad();
				Computer[] coms = new Computer[5];
				Object[] obj = new Object[5];
				coms[0] = c1;
				coms[1] = n1;
	coms[2] = p1;
	coms[3] = c2;
	coms[4] = c3;
}
}
  1. 当没有子父类关系时,就不能子类代替父类传参(下图Student为Person的子类)(当Student独立时,method(s)显示错误)
public class Test{//父类:p 属性name  //子类:S 属性 score
public static void main(String[] args){
	Person p = new Person();
	p.setName(“张三”);
	
	Student s = new Student();
	s.setName(“小红”);
	s.setScore(30.2);

	method(s);
}
public static void method(Person p){
	system.out.println(p.getName);
}
}

二. 抽象类:

  1. 抽象类:随着继承层次中一个个新子类的定义,;类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
  2. abstract class
  3. 用abstract关键字来修饰一个类时,这个类叫做抽象类;
  4. 用abstract来修饰一个方法时,该方法叫做抽象方法。
  5. 抽象方法:只有方法声明,没有方法的实现。以分号结束: abstract int abstactMethod(int a);
  6. 含有抽象方法的类必须被声明为抽象类。
  7. 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。
  8. 一个普通的类继承一个抽象类时必需要重写父类抽象方法
    如果子类是抽象类就不用重写(也可以写)
    //抽象类
public abstract class Animal{
	public String name;
	public int age;
	//抽象方法(abstract修饰,所以没有方法体)
public abstract void sleep();
}
public class Student extents Animal{//需要重写
	private int id;
	private double score;
public abstract void sleep(){
	System.out.println(“hello!);
}
}
public abstract class Student extents Animal{//不需要重写
	private int id;
	private double score;
}
  1. 不能用abstract 修饰属性、私有方法、构造器、静态方法、final的方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章