本文共 1901 字,大约阅读时间需要 6 分钟。
3 类和对象
3.1 封装,构造,this,private


即当手动提供了更高级的构造方法的时候,系统就不再自动提供低级的构造方法。建议,每次都自己手写默认构造。
3.1.2 API

3.1.3 String和StringBuilder

底层原理为字节数组,byte[]


注意常量池,直接String赋值,当两个变量用该种赋值方式赋同样的值时,会指向常量池中的同一个常量。

equals比较字符串的内容是否相同。a.equals(b)


因此,建议使用
StringBuilder

3.1.4 ArrayList 集合基础
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变。
3.2 继承
3.2.1 this, super, extends

extends关键字,用于继承

搜索变量的顺序,搜索范围不考虑父亲的父亲。
this关键字访问本类的成员变量。
访问父类的成员变量,使用super关键字,super.age


子类中的构造方法默认第一句为super()
,即调用子类的构造方法时会先调用父类的构造方法,再执行子类构造方法的其它语句。
3.2.2 方法重写

@override
注解,用来帮助检查子类方法重写父类方法的准确性


父类中的私有内容不支持重写。
子类的访问权限不能更低,public > 默认(不带权限) > 私有

Java不支持多继承

3.2.3 package 包

自动建包,javac -d . HelloWorld.java

3.2.4 修饰符

默认权限修饰符修饰的方法,不同包的子类没有权限调用
3.2.5 final
final修饰成员变量,表示该成员变量为常量,不能被再次赋值。
引用类型指除了基本类型的其它所有类型。
3.2.6 static
表示属性或方法是被所有对象共享的。通过类名或者对象来访问和修改
静态的成员方法只能访问静态的成员变量和静态的成员方法,不能访问非静态的。
因为非静态的成员变量,只有在创造实例后才会创建,而静态方法能通过类名直接访问,所有不能访问非静态变量。

3.3 多态
3.3.1 转型,特点,优缺点

父类实例指向子类对象

成员变量编译和运行都看左边(父),而成员方法编译看左边,执行看右边。因为成员方法有重写,而成员变量没有。

3.3.2 抽象类
abstract关键字,抽象方法必须在抽象类中。抽象类不能直接实例化。

不用加花括号,直接分号。
抽象类中可以有抽象方法。
抽象类可以有构造方法,用于子类实例访问父类数据的初始化。
如果子类继承的时候不想重写父类的内容,可以在子类添加关键字
abstract

3.3.3 接口

创建的时候选择
Interface
,继承的时候关键字为
implements
接口为一个抽象的内容,不能被实例化。如果子类继承的时候不想重写接口的内容,可以在子类添加关键字
abstract

接口中的成员变量默认被final修饰,常量不能修改。而且默认是static静态的,多对象共享一份数据,可以直接通过接口名来访问。相当于成员变量默认的修饰符为
public static final
接口没有构造方法。因为接口主要是对行为进行抽象,没有具体存在。
所有的构造方法默认访问的都是无参构造。所有对象都实现了Object类的方法。Object类只有一个Object()构造方法。

接口中
只能有抽象方法
。接口里面的方法默认为抽象方法,修饰符为
public abstract

注意为
@Override,O为大写

Java中类只能单继承,但是接口可以多继承,逗号分隔即可。extends, implements

抽象类是对事物的抽象,而接口是对行为的抽象。


接口是不能直接实例化的,要的是该接口的实现类,即创建一个类实现该接口,将该实现类作为形参。

3.3.4 内部类


成员内部类:内部类在外部类的成员位置。
局部内部类:内部类在外部类的方法内定义,局部位置。

一般内部类是私有的,为了隐藏保护的内容。但是可以通过外部类的方法去构造内部类的对象。(间接调用)


前提:存在一个类或者接口
注意编写末尾需要分号。

为了方便多次调用匿名内部类的成员方法,将new出来的Inter()匿名对象赋值给i,这样便可以通过i.show()直接调用show方法。
当接口做函数的形参的时候,如果不用匿名内部类的话,需要传入实现了接口的实现类。当实现类有多种时,需要一一创建,浪费资源。而使用匿名内部类可以避免这个问题。在直接调用该函数时,写参数为new Inter(){重写接口的方法}
,这样就可以省去一一创建接口实现类。

转载地址:http://nnloz.baihongyu.com/