A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© xiaobokk 中级黑马   /  2016-8-3 22:10  /  325 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

抽象类:
        抽象类特点:
                A:抽象类和抽象方法必须用abstract关键字修饰

                B:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者接口类

                C:抽象类不能实例化
                        -->实例化的方法: 按照多态的方式,由具体的子类实例化
                D:抽象类的子类:
                        -->抽象类
                        -->重写抽象类中的所有抽象方法
       
        抽象类的成员特点:
                A:成员变量:
                        既可以是变量,也可以使常量
                                abstract可以修饰成员变量吗? -->不能修饰

                B:构造方法  -->有
                        用于子类访问父类数据的初始化
               
                C:成员方法:
                        --> 既可以是抽象的,也可以是非抽象的
       
        抽象类的成员方法特性:
                A:抽象方法
                        --> 强制要求子类做的事情

                B:非抽象方法
                        --> 子类继承的事情,提高了代码的复用性
       
        面试题1:
                一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
                        -->可以
                         -->目的:不让其他类创建本类对象,交给子类完成.
       
        面试题2:
                abstract不能和那些关键字共存?
                        -->static 可以直接直接通过类名访问,而abstract无方法体,所以修饰了无意义
                       
                        -->final 不能被重写,矛盾
       
                        -->private 不能被继承,矛盾

另附一个抽象类的代码
[Java] 纯文本查看 复制代码
class Swap {
	public static void main(String[] args){
		Student s = new Student();
		s.setName("博");
		s.setAge(21);
		System.out.println(s.getName()+".."+s.getAge());
		s.eat();
		s.study();

		System.out.println("----------------");

		Teacher t = new Teacher("李",25);
		System.out.println(t.getName()+".."+t.getAge());
		t.eat();
		t.teach();
	}
}
abstract class Person {
	private String name;
	private int age;

	public Person(){}

	public Person(String name,int age){
		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 eat();
}

class Student extends Person{
	public Student(){}

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

	public void eat(){
		System.out.println("学生吃饭");
	}

	public void study(){
		System.out.println("学生学习");
	}
}

class Teacher extends Person{
	public Teacher(){}

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

	public void eat(){
		System.out.println("老师吃饭");
	}

	public void teach(){
		System.out.println("老师教学");
	}
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马