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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

1、多态是什么,多态的前提条件是什么?

多态就是事物存在的多种形态
前提条件: 要有继承关系  要有方法重写  要有父类引用指向子类对象

2、多态中成员访问的特点分别是什么?

        成员变量:编译看左边,运行看左边
        成员方法(非静态方法):编译看左边,运行看右边
        静态方法:编译看左边,运行看左边

3、多态的好处和弊端分别是什么?

好处:提高了代码的维护性    提高了代码的扩展性
弊端:不能使用子类的特有属性和行为

4、什么是向上转型,什么是向下转型?

向上转型举例:Person P = new SuperMan();
向下转型举例:SuperMan sm = (SuperMan)p
       
5、什么是抽象类,它的特点是什么?

抽象类就是看不懂的
抽象类和抽象方法必须用abstract关键字修饰
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能实例化,按照多态的方式,由具体的子类实例化,其实这也是多态的一种,抽象类多态.
抽象类的子类要么是抽象类要么重写抽象类中的所有抽象方法

6、抽象类的成员特点有哪些?

成员变量:既可以是变量,也可以是常量.abstract不可以修饰成员变量.
有构造方法,用于子类访问父类数据的初始化.
成员方法:既可以是抽象的也可以是非抽象的

7、抽象类的面试题:
        A、一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
        B、abstract不能和哪些关键字共存,为什么?

A: 可以 这么做目的只有一个,就是不让其他类创建本类对象,交给子类完成
B:  abstract和static
        被abstract修饰的方法没有方法体
        被static修饰的可以用类名.调用,但是类名.调用抽象方法是没有意义的
    abstract和final
        被abstract修饰的方法强制子类重写
        被final修饰的不让子类重写,所以他俩是矛盾
    abstract和private
        被abstract修饰的是为了让子类看到并强制重写
        被private修饰不让子类访问,所以他俩是矛盾的

8、什么是接口,它的特点是什么?

从狭义的角度讲就是指java中的interface
从广义的角度讲对外提供规则的都是接口

特点:接口用关键字interface表示  interface 接口名 {}
类实现接口用implements表示  class 类名 implements 接口名 {}
接口不能实例化可以按照多态的方式实例化.
接口的子类 可以是抽象类,但是意义不大.可以是具体类,要重写接口中的所有抽象方法.

9、接口的成员特点有哪些?

成员变量:只能是常量,并且是静态的并公共的.默认修饰符:public static final 建议自己手动给出
构造方法:接口没有构造方法
成员方法:只能是抽象方法 默认修饰符public abstract 建议自己手动给出

10、抽象类和接口的区别是什么?

抽象类成员变量可以是变量也可以是常量 有构造方法 成员方法可以是抽象也可以非抽象
接口 成员变量只可以是常量 成员方法只可以是抽象

11、根据需求,完成如下代码(按照标准格式写),并在测试类中进行测试。
        需求一:
                具体事物:基础班老师,就业班老师
                共性:姓名,年龄,讲课。
                特性:
                        基础班老师讲JavaSE
                        就业班老师讲Android

        需求二:
                具体事物:基础班学生,就业班学生
                共性:姓名,年龄,学习
                特性:
                        基础班学生学JavaSE
                        就业班学生学Android
class Test_People00 {
        public static void main(String[] args) {
                BaseStudent bs = new BaseStudent("李连杰",60);
                System.out.print("我的姓名是:" + bs.getName() + " ,我的年龄是:" + bs.getAge() + " ,我是");
                bs.study();
                WorkStudent ws = new WorkStudent("李冰冰",20);
                System.out.print("我的姓名是:" + ws.getName() + " ,我的年龄是:" + ws.getAge() + " ,我是");
                ws.study();
        }
}

abstract class Student
{
        private String name;                                                                          //姓名
        private int age;                                                                                        //年龄

        public Student() {}                                                                                        //空参
        public Student(String name,int age) {                                                //有参
                this.name = name;
                this.age = age;
        }

        public void setName(String name) {                           //设置姓名
                this.name = name;
        }
        public String getName() {                                                                        //获取姓名
                return name;
        }
       
        public void setAge(int age) {                              //设置年龄
                this.age = age;
        }
        public int getAge() {                                                                        //获取年龄
                return age;
        }
       
        public abstract void study();                               //学习的方法

}

class BaseStudent extends Student
{
        public BaseStudent() {}                                                                                        //空参
        public BaseStudent(String name,int age) {                                                //有参
                super(name,age);
        }

        public void study() {                                                                                //学习
                System.out.println("基础班学生学JavaSE");
        }
}

class WorkStudent extends Student
{
        public WorkStudent() {}                                                                                        //空参
        public WorkStudent(String name,int age) {                                                //有参
                super(name,age);
        }

        public void study() {                                                                                //学习
                System.out.println("就业班学生学JavaEE");
        }
}
---------------------------------------------------------------------------------------------------------------------------------------------------

        需求三:
                已知猫类和狗类:
                        属性:毛的颜色,腿的个数
                        行为:吃饭
                        猫特有行为:抓老鼠catchMouse
                        狗特有行为:看家lookHome

class  Test00_Animal{
        public static void main(String[] args) {
                Cat c = new Cat("黄色",4);
                c.eat();
                c.catchMouse();
        }
}


abstract class Animal
{
        private String color;
        private int leg;

        public Animal() {}
        public Animal(String color,int leg) {
                this.color = color;
                this.leg = leg;
        }

        public void setColor(String color) {
                this.color = color;
        }
        public String getColor() {
                return color;
        }

        public void setLeg(int leg) {
                this.leg = leg;
        }
        public int getLeg() {
                return leg;
        }

        public abstract void eat();
       
}

class Cat extends Animal
{
        public Cat() {}
        public Cat(String color,int leg) {
                super(color,leg);
        }

        public void eat() {
                System.out.print("猫吃鱼");
        }

        public void catchMouse() {
                System.out.print("猫抓老鼠");
        }
}

class Dog extends Animal
{
        public Dog() {}
        public Dog(String color,int leg) {
                super(color,leg);
        }

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

        public void lookHome() {
                System.out.print("看家");
        }
}
---------------------------------------------------------------------------------------------------------------------------------------------------
        需求四:
                已知接口Play中有一个方法playGame(),再测试类中如何调用该方法?

class  Test_Play{
        public static void main(String[] args) {
                Play p = new ZiPlay();                                               //父类引用指向子类对象
                p.playGame();
        }
}


interface Play                                          
{
        public abstract void playGame();
}

class ZiPlay implements Play                                                      
{
        public void playGame() {
                System.out.println("接口的子类");
        }
}

--------------------------------------------------------------------------------------------------------------------------------------------------
        需求五:
                已知动物类(姓名,年龄,吃饭,睡觉),它有两个子类,分别是猫类和狗类。
                不同的是猫吃鱼,狗吃肉。
                经过马戏团的培训后,部分猫会跳高,部分狗也会跳高。
                请写代码实现。

class  Test5_Animal{
        public static void main(String[] args) {
                JumpCat jc = new JumpCat("小黑猫",5);
                jc.jumping();
                jc.eat();
                jc.sleep();

                JumpDog jd = new JumpDog("小黑狗",3);
                jd.jumping();
                jd.eat();
                jd.sleep();

        }
}
/**定义抽象动物类*/
abstract class Animal
{
        private String name;
        private int age;

        public Animal() {}
        public Animal(String name,int age) {
                this.name = name;
                this.age = age;
        }

        public void setName(String name) {
                this.name = name;
        }
        public String getName() {
                return name;
        }

        public void setAge(int age) {
                this.age = age;
        }
        public int getAge() {
                return age;
        }

        public abstract void eat();
        public abstract void sleep();

}
/**定义猫类*/
class Cat extends Animal
{
        public Cat() {}
        public Cat(String name,int age) {
                super(name,age);
        }

        public void eat() {
                System.out.println("猫吃鱼");
        }
        public void sleep() {
                System.out.println("站着睡");
        }
}
/**定义狗类*/
class Dog extends Animal
{
        public Dog() {}
        public Dog(String name,int age) {
                super(name,age);
        }

        public void eat() {
                System.out.println("狗吃骨头");
        }
        public void sleep() {
                System.out.println("坐着睡");
        }
}
/**定义接口*/
interface Inter
{
        public abstract void jumping();
}
/**定义跳高猫类*/
class JumpCat extends Cat implements Inter
{
        public JumpCat() {}
        public JumpCat(String name,int age) {
                super(name,age);
        }
       
        public void jumping() {
                System.out.println("猫的名字是:" + getName() + " ,年龄是:" + getAge());
        }
}
/**定义跳高狗类*/
class JumpDog extends Dog implements Inter
{
        public JumpDog() {}
        public JumpDog(String name,int age) {
                super(name,age);
        }
       
        public void jumping() {
                System.out.println("狗的名字是:" + getName() + " ,年龄是:" + getAge());
        }
}

0 个回复

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