java基础知识---面向对象(三) 1.多态的前提? 1、要有继承关系。 2、要有方法重写。 3、要有父类引用指向子类对象。 2.多态中成员访问特点? 只有非静态的方法,是编译看左边,运行看右边。原因是因为:方法有重写。 其他(静态方法,成员变量)都是编译看左边(父类),运行看左边(父类)。 3.Person p=new Student();向上转型 Student s=(Student)p ;向下转型 4.多态的好处? 1、维护性。 2、扩展性。 3、可以作为方法形参的数据类型,用于接收其任意的子类对象。 弊端:父类引用不能使用子类的特有成员。 5.抽象类的成员特点?比普通类多了一个成员方法 成员变量:可以是变量,也可以是常量。 构造方法:有。 抽象类既然不能被实例化,要构造方法有什么用? 用于子类对象访问父类数据前,对父类数据进行初始化。 成员方法: 可以是抽象方法,也可以是非抽象方法。 抽象方法:强制要求子类必须完成某些事情。 非抽象方法:用于被子类继承,提高代码的复用性。 6.abstract不能与哪些关键件共存? private:被private修饰的内容,子类是没有办法继承的,但是抽象方法是要求子类必须重写的,所以他们互相矛盾 final:被final修饰的内容,子类是没有办法重写的,但是抽象方法是要求子类必须重写的,所以他们互相矛盾 static:被static修饰的内容可以通过类名.的形式调用,但是我们知道抽象方法是没有方法体的,所以及时可以通过类名.的方式去调用,也是没有任何 意义的,所以他们不能共存。 7.一个抽象类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义? 可以,这么做的目的只有一个,就是不让其他的类来创建该类的对象。 8.接口成员的特点?接口中只能有常量和抽象方法 9.抽象类与接口的区别? 1、成员区别 2、关系区别 3、设计理念的区别: 抽象类:被继承,体现的是is a的关系,里边定义的是整个继承体系的 共性内容。 接口:被实现,体现的是like a的关系,里边定义的是整个继承体系的 扩展内容。 10.定义包时注意事项 1、package语句必须是程序的第一条可执行语句。 2、一个java文件中,package语句只能有一个。 3、如果不写package,表示默认无包名。 11.导包的时候不要写.* 12.四种权限修饰符 private:只能在本类中被使用。 记忆:强调的是给 自己 使用。 默认:本类,同包下的类。 记忆:强调的是给 同包下类的 使用。 protected:本类,同包下的类,不同包下的子类。 记忆:强调的是给 子类 使用。 public:公共的,给大家使用。 记忆:强调的是给 大家 使用。 注意: 被public修饰的类叫公共类(顶级类),一个java文件中,公共类只能有一个, 并且公共类名必须和java文件名一致。 13.对匿名内部类的理解? 它是没有名字的局部内部类.可以理解为继承了类或实现了接口的匿名子类对象. 14.在内部类的成员方法中,如何使用局部变量,内部类的成员变量,以及外部类的成员变量? 局部变量:直接用。 内部类的成员变量:通过 this. 的形式调用。 外部类的成员变量:通过 外部类名.this. 的形式调用。 内部类之所以能使用外部类的成员,是因为内部类能获取到外部类的引用: 外部类名.this 15.成员内部类可以用private(安全),static(为了调用方便)修饰 16.局部内部类访问局部变量必须用final修饰,为什么? 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象 还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用.但是jdk1.8取消 了这个事情,所以我认为这是个bug. 17.匿名内部类格式? new类名或接口名(){重写方法}; |