Java基础系列三之抽象

抽象类 

1、抽象:笼统、模糊、不具体的概念。 

2、概念:使用了关键词abstract声明的类叫作”抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽

象)。”抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。 

格式:abstract 类名{ } 

3、特点: 

  • 成员可以是变量,也可以是一个常量。
  • 构造方法:可以有无参,可以有有参,作用:给对象进行初始化的。
  • 成员方法:可以有抽象方法,还可以有非抽象方法。
  • 被abstract关键字修饰,该方法只有声明没有实现,抽象方法必须定义在抽象类中。 
  • 抽象类不可以被实例化,因为抽象类实例化的对象调用抽象方法没有意义。 
  • 抽象类有其子类覆盖了所有的抽象方法后,该子例才可以被实例化,否则,这个子例还是抽象类。 

4、抽象类中的注意事项: 

●抽象类有构造函数吗? 

有,用于给子类对象进行初始化。 

●抽象类可以不定义抽象方法吗? 

可以的,抽象类中既可以有抽象方法,也有非抽象方法,但很少见,目的就是不让该类创建对象。AWT 的适配器对象就是这种类。 

●抽象关键字abstract不可以与什么关键字共存? 

private、static、final三个不行。 

●由abstract修饰的方法就是抽象方法,抽象方法没有方法体。 

●抽象类不一定要包含抽象方法,但是如果类中包含了抽象方法,则该类必须被定义为抽象类。 

●如果一个子类没有实现抽象父类中所有的抽象方法,则该子类也成为一个抽象类。 

构造方法静态方法私有方法final方法不能被声明为抽象方法。 

5、抽象类与一般类的异同点? 

◆相同:抽象类和一般类都用来描述事物,都在内部定义了成员。 

◆不同:一般类有足够的的信息描述事物,抽象类描述事物的信息可能不足;一般类不能定义抽象方法,只能定义非抽象方法,而

抽象类可以定义抽象方法,也可以定义非抽象方法;一般类可被实例化,抽象类不能被实例化。 

6、抽象类一定是个父类吗? 

抽象类可能是父类,但是当子类没有实现抽象父类中所有的抽象方法,那么子类也变成了一个抽象类。

代码示例

package org.westos;

abstract class Animal {

	// 提供一个抽象方法(只是一个声明)
	// public void eat() {
	//
	// }
	public abstract void eat(); // 抽象方法,没有方法体,需要子类去实现抽象类的这个抽象方法

	// 非抽象功能
	public void method() {

	}
}

// 定义一个抽象的猫类
// abstract class Cat extends Animal{
//
// }

// 具体的动物类
class Cat extends Animal {

	@Override
	public void eat() {
		System.out.println("猫吃鱼....");
	}

}

class Dog extends Animal {

	@Override
	public void eat() {
		System.out.println("狗吃骨头....");
	}

}

public class AbstractDemo {
	public static void main(String[] args) {
		Animal a = new Cat();
		Animal a2 = new Dog();
		a.eat();
		a2.eat();
	}
}

代码示例

package org.westos;

abstract class Person {

	// private abstract void function() ;
	// public final abstract void function() ; .//错误的,非法的
	// public static abstract void function() ;//非法的

	private String name;
	int num = 10; // 变量
	public final int num2 = 100;// 常量

	// 非抽象的功能
	public void show() {
		System.out.println(num);
		System.out.println(num2);
	}

	// 抽象功能
	public abstract void method();
}

// 学生类
class Student extends Person {

	@Override
	public void method() {
		System.out.println("method student...");
	}

}

public class AbstractDemo11 {
	public static void main(String[] args) {
		// 创建对象
		Person p = new Student(); // =号左边:抽象类 =号右边:具体类 形式:抽象类多态
		p.show();
		p.method();
	}
}

老师案例

具体事物:基础班老师,就业班老师

共性:姓名,年龄,讲课。

分析:

BasicTeacher

name,age

无参.有参

setXXX()/getXXX()

                                       teach功能  hobit功能

WorkTeacher

name,age

无参.有参

setXXX()/getXXX()

                                        teach功能  hobit功能  

抽象类:Teacher类

                                 抽象方法: teach功能() ;

                                 非抽象方法:hobit功能

抽象类Teacher类代码

package org.westos.抽象练习;

//抽象老师类
public abstract class Teacher {

	private String name;
	private int age  ;
	public Teacher() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public Teacher(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//抽象功能
	public abstract void teach();
	//非抽象功能
	public void hobit() {
		
	}
}

具体类BasicTeacher类代码

package org.westos.抽象练习;

public class BasicTeacher extends Teacher {
	
	

	public BasicTeacher() {
		super();
		// TODO Auto-generated constructor stub
	}

	public BasicTeacher(String name, int age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void teach() {
		System.out.println("基础班老师教JavaSE...");
	}
	
	public void hobit() {//对父类hobit()的重写
		System.out.println("基础班老师爱踢足球...");
	}

}

基础类WorkTeacher类代码

package org.westos.抽象练习;

public class WorkTeacher extends Teacher {

	
	public WorkTeacher() {
		super();
	}

	public WorkTeacher(String name, int age) {
		super(name, age);
	}

	@Override
	public void teach() {
		System.out.println("就业班老师教JavaEE...");
	}
	
	public void hobit() {
		System.out.println("就业班老师爱打篮球...");
	}

}

测试类AbstractTest类代码

package org.westos.抽象练习;

public class AbstractTest {
	
	public static void main(String[] args) {
		//创建具体类对象
		BasicTeacher bt = new BasicTeacher("张三", 27) ;
		System.out.println(bt.getName()+"----"+bt.getAge());
		bt.teach();
		bt.hobit();
		
		System.out.println("------------------");
		
		Teacher t = new BasicTeacher("李四", 28) ;//抽象类多态
		System.out.println(t.getName()+"----"+t.getAge());
		t.teach();
		t.hobit();
	}
}








猜你喜欢

转载自blog.csdn.net/qq_40727767/article/details/80002679
今日推荐