你可以先自测的问下自己,下面这些你都能回答的很清楚吗!!!下面我会用最精简的答案告诉你。
1、什么是类?什么是对象?
2、什么是继承?什么是聚合?
3、什么是向上转型?
4、什么是抽象类?
5、什么是接口?什么是多态(动态绑定)?
6、抽象类和接口有什么区别?不单单是语法层面,主要是什么时候使用接口,什么时候使用抽象类?
7、面向对象编程时如何思考?
8、Java中到底有没有多继承?
---------------------------------------------------------------------------------------------------------------
一、什么是类?什么是对象?
类可以看成一类对象的模板,对象可以看成该类的具体实例。
二、什么是继承?什么是聚合?
继承:
表示一般和特殊的关系,XX是一种XX,Is—A。
聚合:
表示整体和部分的关系,XX是XX的一部分,聚集是Has-A,组合是Contains-A。
聚集是一种强力形式的关联,表示了部件/整体关系,例如球队(整体)具有队长和队员(部件)。 队员(部件)可以具有自己的生命周期,并不必然随着球队(整体)的创造和销毁而产生和消亡。
组合是更强力形式的聚集,其中head、body、limb(部件)会嵌入person(整体)的内部,并且随着其创建和销毁而产生和消亡。
聚集和组合的区别在于:聚集关系是“has-a”关系,组合关系是“contains-a”关系;聚集关系表示整体与部分的关系比较弱,而组合比较强;聚集关系中代表部分事物的对象与代表聚集事物的对象的生存期无关,一旦删除了聚集对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
组合和聚集是有很大区别的,这个区别不是在形式上,而是在本质上:比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚集。在实际写代码时组合方式一般会这样写:A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。聚集方式则是这样:A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它,传给它的这个对象不是A类创建的。
三、什么是向上转型?
- 一个基类的引用类型变量可以“指向”其子类对象。
- 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)。
Father f = new Son();
四、什么是抽象类?
- abstract修饰,可以定义非抽象方法,抽象方法必须在子类实现。
- 不能有抽象的构造方法和抽象的静态方法。
- 如果子类没有实现抽象父类必须实现的方法,那么子类也必须是抽象类。
五、什么是接口?什么是多态(动态绑定)?
接口:
表示一种实现关系。
多态:
同一行为具有不同的表现方式。
实现多态必须具备的三个条件:
- 要有继承
- 要有重写
- 父类引用指向子类对象
六、抽象类和接口的区别?
上面这些是我从别的地找的,但是只了解这些就够了吗,重点在于下面是我最想说的:
接口和抽象类本质上的区别:
- 抽象类是为继承而存在的。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。
- 接口是对行为的抽象。接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。接口是一种极度抽象的类型,它比抽象类更加“抽象”。
- 本质上概括:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。继承是一个“是不是”的关系,而接口实现则是 “有没有”的关系。
举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将 飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。
七、面向对象编程时如何思考?
用面向对象编程时:
- 应该优先考虑有哪些类,哪些对象;
- 然后考虑每个类每个对象应该有哪几个属性和方法;
- 然后再考虑类和类之间有什么样的关系。
八、Java中到底有没有多继承?
内部类:
- 内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以。
- 内部类拥有外围类的所有元素的访问权限。
- 可以间接实现多重继承。
内部类分类:
普通内部类(成员内部类)
局部内部类
匿名内部类
嵌套内部类(静态内部类)
最后,欢迎扫码加入星球《极客e家》,星球里,大咖云集,我们将一起打造极客文化。在这里,您将体会到:
【科技动态】:我们聚焦软件技术发展趋势和行业最新动态,尤其ChatGPT这波的AI风向标,让您轻松掌握一手科技资讯。
【共同成长】:除了传统的【系列课程 & 面试】栏目之外,我们还将分享优质的技术文章和工具等,还有更多来自星主和各个小伙伴的原创学习资料,让您的技术更上一层楼,生产性更进一步提高,我们还提供技术交流和问答平台,更有针对性的解决您的问题。
【小白逆袭】:如果您是刚入行或工作不久的软件小白,在这里,您将在极客文化的熏陶中,引领您走向技术大牛之路。
【技术面试】:我们也会分享一些技术面试的重点和常问的技术问题。
【行业资讯】:分享和探讨最新行业资讯,尤其是星主所在城市(大连)的软件行业动态和技术趋势。
更多精彩内容,期待您在星球中探索。