Java基础3(接口与抽象类等)

-- Java基本类型占用的字节数:
1字节: byte , boolean
2字节: short , char
4字节: int , float
8字节: long , double
注:1字节(byte)=8位(bits)

-- 接口与抽象类应用场景区别
 1.如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
如果你想实现多重继承,那么你必须使用接口。
由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。
 2.抽象类表示共有许要实现的方法 接口用来特定类有需要才实现 人都会吃饭 但有的人抽烟
 3.抽象类是用来捕捉子类的通用特性的
 4.抽象类是 is a关系;而接口是has a关系。

1,抽象类的成员可以具有访问级别 接口的成员全部public级别
2,抽象类可以包含字段 接口不可以
3,抽象类可以继承接口 接口不能继承抽象类
4,抽象类的成员可以具有具体实现 接口不行
5,抽象的子类可以选择性实现其基类的抽象方法 接口的子类必须实现
6,接口是抽象类的一种特例!

1、相同点
 A. 两者都是抽象类,都不能实例化。
 B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2.、不同点
 A. interface需要实现,要用implements,而abstract class需要继承,要用extends。
 B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
 C. interface强调特定功能的实现,而abstract class强调所属关系。 
 D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

3、interface的应用场合
 A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。
 B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
 C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
 D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4、abstract class的应用场合
 一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
 A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
 B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
 C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

-- 父类的静态方法不能被子类继承,更谈不上重写,就算是子类中有一个和父类一模一样的静态方法,那也是子类本身的,和父类的那个静态方法不是一回事。方法加静态后就属于类不属于对象了。

-- Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同?
<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。
<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”

<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”

-- 类和对象的区别

类是对象的抽象;对象是类的一个实例;类 对象 = new  类();

类和对象的区别如下:
 1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
 2,对象是类的一个具体。它是一个实实在在存在的东西。
 3,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
 4,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变

-- 非静态内部类为什么持有外部类的this引用- https://blog.csdn.net/beixiaozhang/article/details/52950669
非静态内部类为什么持有外部类的this引用?
内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。
1. 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象(this)的引用;
2. 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为内部类中添加的成员变量赋值;
3.在调用内部类的构造函数初始化内部类对象时,会默认传入外部类的引用。

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/81020709
今日推荐