黑马程序员技术交流社区

标题: [哈尔滨校区]面向对象问题总汇(下) [打印本页]

作者: 15846574191    时间: 2015-12-7 23:29
标题: [哈尔滨校区]面向对象问题总汇(下)
26,final关键字可以干什么?有什么特点?
        修饰类:不能被继承,但是可以继承其他类。
        修饰变量:其实是一个常量。一般和public static共用。
        修饰方法:不能被子类重写。
27,public static final 他们三者之间有无顺序关系?
        没有顺序关系,但是一般写成:public static final
28,final修饰局部变量的效果与修饰局部变量的初始化时机
        基本类型:值不能改变。
        引用类型:地址值不能改变,但是对象的属性值可以改变。
        初始化时机
        1、显示初始化。
        2、通过构造方法进行初始化。(在对象构造完毕前进行初始化即可)
29,多态是什么,前提是什么?
        多态是同一对象在不同时刻表现出来的不同状态(形态)。
        多态前提:1要有继承关系
                         2要有方法重写
                         3要有父类引用指向子类对象,例如:Father a = new son();
30,多态成员的访问特点
        成员变量:编译看左边(父类)是看编译时左边有没有这个变量,有就编译通过.没有就报错
                         运行看左边是运行时用左边的变量
        成员方法:编译看左边是看编译时左边有没有这个方法,有就编译通过,没有就报错
                         运行看右边是运行时用右边的变量
        静态方法:编译看左边(父类)是看编译时左边有没有这个静态方法,有就编译通过.没有就报错
                         运行看左边是运行时用左边的静态方法
        总结:只有非静态的方法,是编译看左边,运行看右边。原因是因为:方法有重写。
             其他(静态方法,成员变量)都是编译看左边(父类),运行看左边(父类)
31,多态的好处及弊端?
        好处:1维护性
                 2扩展性
                 3可以作为方法的形式参数,用于接收其任意子类对象
        弊端:父类的引用不能使用子类的特有成员
32,什么是向上转型?什么是向下转型?
        向上转型是小的转成大的,父类引用指向子类对象
        向下转型是大的转成小的
33,抽象类概述及其特点?
        抽象类是被 abstract 修饰的类
        特点:1必须用abstract修饰
                 2抽象类中可以没有抽象方法
                 3抽象类不能直接实例化,可以通过创建子类对象完成实例化
                 4抽象类的子类要么是抽象类要么重写抽象类中的所有方法
34,抽象类成员特点?
        成员变量:可以是变量也可以是常量
        构造方法:用于子类对象访问父类数据前,对父类数据进行初始化
        成员方法:可以是抽象方法也可以是非抽象方法,其中抽象方法强制要求子类做事情,非抽象方法用于子类继承提高代                         码复用性
35,一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
        可以,不让其他类来创建该类的对象
36,abstract不能和哪些关键字共存
        private 被private修饰的内容无法被子类继承,但是抽象方法要求子类必须重写,相互矛盾
        final 被final修饰的内容无法被子类重写,但是抽象方法要求子类必须重写,相互矛盾
        static 被static修饰的的内容,可以通过类名.的形式调用,但是抽象方法是没有方法体的,调用无意义
37,接口的概述及其特点?
        接口比抽象更抽象,里面的所有方法都是抽象的
        特点:1接口被关键字interface修饰
                 2接口的实现用implement关键字
                 3接口不能实例化,需要通过多态创建子类进行实例化
                 4接口子类要么是抽象类要么是具体的子类并且重写接口中所有抽象方法
38,接口的成员特点?
        成员变量:只能是常量,因为默认有 public static final 修饰
        没有构造方法
        成员方法:只能是抽象方法,因为默认有 public abstract 修饰
        总结:接口中有且只有常量或者抽象方法
39,抽象类和接口的区别?
        成员区别:成员变量:抽象类既可以是常量也可以是变量,接口只有常量
                         构造方法:抽象类有,接口没有
                         成员方法:抽象类可以有抽象类也可以没有抽象方法,接口只有抽象方法
        关系区别:类与类:继承。可以单继承,不能多继承,但是可以多层继承
                         类与接口:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时,实现多个接口
                         接口与接口:继承。可以单继承,也可以多继承
        设计理念的区别:抽象类是被继承,体现是is a的关系,里面记录的是整个继承体系共性内容
                                   接口是是被实现,体现是like a的关系,里面记录的是整个继承体系的扩展内容
40,package,import,class之间有无顺序关系?
         有,从上到下: package  --》 import  --》 class
        注意:一个java文件中,package语句只能有一个,而import,class可以也多个(class一般一个java文件中只会写一个)。                                       
41,权限修饰符都有哪几种作用分别是什么?
        private:只能在本类中被使用,强调的是给自己使用
        默认:在本类,同包下的类中使用,强调的是给同包下类的使用
        protected:在本类,同包下的类,不同包下的子类中使用,强调的是给子类使用
        public:公共的,给大家使用。
        注意:被public修饰的类叫公共类(顶级类),一个java文件中,公共类只能有一个,并且公共类名必须和java文件                 名一致。
42,内部类的概述与特点
        概述:类里边还有一个类,里边那个类就是内部类。
        特点:1、内部类可以直接使用外部类的成员,包括私有。
              2、外部类如果想使用内部类的成员,必须创建对象。
                                格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
                                举例:  Outer.Inner oi = new Outer().new Inner();                               
43,成员内部类的概述以及被private和static修饰的作用
        概述:定义在外部类的成员位置的类,就叫成员内部类。
                  简单记忆:定义在成员位置。                 
        加私有(private):为了安全考虑。可以在外部类中提供一个公共的访问方法
        加静态(static)是为了方便调用。
                        创建对象的格式:
                                外部类名.内部类名 对象名 = 外部类.内部类对象;
                                Outer.Inner oi = new Outer.Inner();
                        注意:如果内部类中有静态方法,那么这个内部类也必须加静态。
                               
44,如果在内部类的方法中,想使用局部变量,内部类的成员变量,外部类的成员变量,分别应该怎么实现?
        局部变量:直接使用
        内部类的成员变量:通过 this. 的形式调用
        外部类的成员变量:通过 外部类名.this. 的形式调用
45,局部内部类访问局部变量,该局部变量必须加final修饰,为什么?
        因为局部变量的生命周期是依赖于方法,方法调用完毕后,局部变量就释放了,如果此时局部内部类对象还在使用局部变量,就会报错,所以该局部变量必须加final修饰,就是为了延长局部变量的生命周期,但是JDK1.8取消了这个事情,所以我觉得这是一个Bug。
46,匿名内部类概述,前提,格式
        概述:没有名字的(局部)内部类。
        前提:必须得有一个类(一般是抽象类)或者接口。
        格式:
                new 类名或者接口名 () {
                        重写类或者接口中的所有抽象方法;
                };
        理解:其实匿名内部类就是实现了接口(或者继承了类)的匿名的子类对象                               
47,什么时候使用匿名内部类?
        1、匿名内部类只针对重写一个抽象方法。
        2、当我们看到一个方法的形参的数据类型是一个接口或者抽象类的时候,
           就可以考虑使用匿名内部类。(实际开发中用到的非常多)
48,要求:使用已知的变量,在控制台输出30,20,10。               
        class Outer {
                public int num = 10;
                class Inner {
                        public int num = 20;
                        public void show() {
                                int num = 30;
                                System.out.println(?);
                                System.out.println(??);
                                System.out.println(???);
                        }
                }
        }
        class InnerClassTest {
                public static void main(String[] args) {
                        Outer.Inner oi = new Outer().new Inner();
                        oi.show();
                }       
        }
49,按照要求,补齐代码
                interface Inter { void show(); }
                class Outer { //补齐代码 }
                class OuterDemo {
                        public static void main(String[] args) {
                                  Outer.method().show();
                          }
                }
                要求在控制台输出”HelloWorld”
                //补齐代码:
                public static void method(){
                        return new Inter(){                //返回的其实是一个,实现了Inner接口的子类的匿名对象
                                public void show(){
                                        System.out.println(HelloWorld);                               
                                }
                        };
                }




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