当前位置 : 主页 > 编程语言 > c++ >

自己对常见问题的一些理解(一)

来源:互联网 收集:自由互联 发布时间:2021-07-03
gistfile1.txt 1.接口是否可实现接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?接口可以实现接口,抽象类可以实现接口,抽象类可以继承具体类接口和抽象类
gistfile1.txt
1.接口是否可实现接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?

接口可以实现接口,抽象类可以实现接口,抽象类可以继承具体类
接口和抽象类的区别在于:
1.接口的声明用interface,抽象了的声明用abstract class,一个类可以extends一个抽象类,但是可以implements多个接口
2.抽象类中必须有抽象方法,也可以有普通方法;但是接口中只能有抽象方法
3.接口中的方法一定是public abstract的,接口的属性默认是 public final的,初始化赋值之后,就不可修改
4.抽象类一定是有构造函数的,用于子类创建对象时使用;但是接口是不提供构造函数的
5.抽象类就是为子类服务的,它的构造方法是为了让子类创建对象时调用的,它的抽象方法是为了让子类重写,然后又更具体的实现的
6.而接口只是一个功能规范而已,一个类可以实现多个无关接口,一个接口也可以被多个无关的类实现

2.Overload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法?

overload是重载,重载是指一个类中同名方法的参数值不同从而可以有不同实现,与返回值类型无关
override是重写,重写是指在子类对继承于父类的方法给出不同实现,又叫做覆盖
Java通过重写和重载来实现面向对象多态这一特性

3.面向对象三大特性?
封装,继承和多态:
封装就是,把相关的属性和方法封装为一个对象,对外界隐藏这个对象的具体细节,降低模块之间的耦合性。具体表现为:把属性都设为私有,外界必须通过我们提供的get/set方法来操作属性

继承就是,子类可以继承父类共有属性和方法,这使代码可以复用,同时子类可以通过覆盖父类方法,或者新增属性方法来给出父类的具体实现,

多态就是,在声明时使用父类的变量来接收子类对象的地址,通过该变量调用方法时,实际上是调用的子类对象的方法,子类可以通过重写父类方法来给出不同的实现;即使在同一类中,同名方法也可以通过不同的参数列表来来实现方法的重载,提供不同的具体实现,这些都是多态的体现。

4.String,StringBuiler和StringBuffer的区别?
String对象是final的,所以是不允许修改的,所以每次对指向String的引用型变量进行修改操作时,都会创建一个新的String对象,所以当字符串经常需要修改时,会非常浪费资源
这时候我们就可以用StringBuiler和StringBuffer,这两个类的变量是可修改的,在修改完毕之后,再调用toString方法转化为字符串,十分方便
StringBuffer是牺牲了效率,提高了线程安全的StringBuilder

5.线程是什么?有几种状态?
线程是程序执行的最小单元,在一个程序执行过程中,启用多个线程完成不同的工作,称之为多线程
创建一个线程类的对象有两种方法:一是继承Thread,重写run方法,另一种是实现Runnable,重写run方法。然后调用start方法来启动一个线程
在线程被创建之后,他是出于就绪状态的,等待cpu调用之后进入运行状态,如果中途发生阻塞事件,它就进入了阻塞状态,从阻塞状态恢复之后又回到运行状态,等到运行结束就进入了死亡状态

6.sleep()和wait()方法的区别、
sleep是Thread的方法,让当前线程休眠一段时间,让出cpu给其他线程使用,他不会释放对象锁;
wait是Object的方法,会让线程进入等待,放弃对象锁,直到调用本对象的notify()或者notifyAll()
网友评论