11、构造器能否被重写?【有问题需要查看相关文档】
首先,构造器是不能被继承的,因为每个类的类名都不相同,而构造器名称与类名相同,所以根本谈不上继承。
又由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的。
1、如何理解面向对象
(1)首先,要引申出类:类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
(2)面向对象共有三个特征:封装,继承,多态。
封装:
把一些属性和方法封装起来,形成一个类;可以隐藏实现细节。提高了代码的复用性。也提高了安全性。
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
封装的作用:
1、提高了代码的复用性。
2、隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。这是核心之一,也可以理解为就是封装的概念。
3、提高了安全性。
继承:
是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类能调用父类的非private修饰的成员,同时还可以自己添加一些新的成员,扩充父类,甚至重写父类已有的方法,使其表现符合子类的特征。
继承的好处:
提高了代码的可维护性
提高了代码的复用性
让类与类之间产生了继承关系
继承的弊端:
类与类之间的耦合度过高
继承特点:
java中类只能够单继承,不能多继承,可以多层继承
封装和继承其实有一个共同的目的就是代码重用。
多态:
多态是同一个行为具有多个不同表现形式的能力。多态性是对象多种表现形式的体现
Java作为面向对象的语言,同样可以描述一个事物的多种形态。
方法的重载和重写都体现了多态性。
类中多个方法的重载叫多态,父子类中方法的覆盖也叫多态。
多态有方法的多态和对象的多态(一个对象多种形态)。
2、类成员的访问修饰符:
即类的方法和成员变量的访问控制符,一个类作为整体对象不可见,并不代表他的所有域和方法也对程序其他部分不可见,需要有他们的访问修饰符判断。
权限如下:
图片.png
private表私有
private修饰的成员只能在当前类中访问,其他类中无法直接访问
3、this关键字
(1)解决局部变量和成员变量同名问题
当在方法中出现了局部变量和成员变量同名的时候,可以在成员变量名前面加上this.来区别成员变量和局部变量
(2)构造方法之间能不能相互调用
【this到底代表什么呢?this代表的是对象,具体代表哪个对象呢?哪个对象调用了this所在的方法,this就代表哪个对象。】
5、抽象类和抽象方法
抽象类中有抽象方法也有一般方法
图片.png
图片.png
抽象方法需要覆盖
抽象类的特点:
1,抽象类与抽象方法都必须使用 abstract来修饰
2,抽象类不能直接创建对象
3,抽象类中可以有抽象方法,也可以没有抽象方法
4,抽象类的子类
a,实现了抽象方法的具体类
b,抽象类
抽象类面试题:
1,抽象类中是否可以没有抽象方法?如果可以,那么,该类还定义成抽象类有意义吗?为什么?
可以没有抽象方法,有意义,不会让其他人直接创建该类对象
6、super
super:用来表示当前对象中包含的父类对象空间的引用
调用父类的成员变量:
super.成员变量;
调用方法的成员方法:
super.成员方法();
7、接口
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,
接口定义时需要使用interface关键字。
图片.png
图片.png
instanceof关键字来判断某个对象是否属于某种数据类型。
8、Java 中的final关键字有哪些用法?
9、抽象类(abstract class)和接口(interface)有什么异同?
10、阐述静态变量和实例变量的区别。
静态变量也叫类变量,这种变量前加了static修饰符。可以直接用类名调用,也可以用对象调用,而且所有对象的同一个类变量 都是共享同一块内存空间。
实例变量也叫对象变量,这种变量没有加static修饰符。只能通过对象调用, 而且所有对象的同一个实例变量是共享不同的内存空间的。
区别在于:
静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再去获取它的值,得到的是改变后的值;
实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。
11、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以 直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部 发出对非static方法的调用。