黑马程序员技术交流社区

标题: 面对对象第四天_抽象类 [打印本页]

作者: xiaobokk    时间: 2016-8-3 22:10
标题: 面对对象第四天_抽象类
抽象类:
        抽象类特点:
                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("老师教学");
        }
}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2