定义子类extends
Java中的所有继承都是公共继承,没有私有继承和保护继承
public class ClassB extends ClassA
子类比父类有更多的功能、封装了更多的数据。
覆盖方法override子类中可以增加字段、增加方法或者覆盖超类的方法,但不可以删除字段和方法。
构造器super(para1, para2, ...);
- 使用super调用构造器的语句必须是子类构造器的第一条语句
- 如果子类的构造器没有显示调用超类的构造器,将自动调用超类的无参数构造器。
- 如果超类没有无参书数的构造器,子类中又没有显示地调用超类的其它构造器,则编译报错
继承可以多层次,但不可以继承多个类(多重继承)。
多态polymorphism对象变量是多态的,一个ClassA类型的变量既可以引用ClassA的对象,也可以引用ClassA类型任何一个子类的对象
阻止继承:final类和方法- 声明为final的类无法被继承
- 声明为final的方法,子类无法覆盖该方法(final类中的所有方法自动成为final方法)
- 将某个类的对象引用转换成另外一个类的对象引用。将子类的引用赋值给一个超类变量时是允许的,但将一个超类的引用赋值给子类变量时(在继承链上进行向下的转换),就必须进行强制类型转换。
- 只能在继承层次内进行强制类型转换
- 将超类强制类型转换成子类之前,要用instanceof进行检查 (a instanceof A)
抽象类一般只用来派生其它基类,而非用来构造你想使用的特定的实例
-
抽象方法
public abstract void func () {... } -
包含一个或多个抽象方法的类本身必须被声明为抽象的
abstract class ClassName { ... } -
抽象类也可以包括字段和具体方法
-
即使不包含抽象方法,也可以将类声明为抽象类
-
抽象类不能实例化
-
继承抽象类有两种方式,一是在子类中保留部分或全部抽象方法,这样就必须将子类也声明为抽象类,而是在子类中实现全部的抽象方法
- public:对外部完全可见
- protected:对本包和所有子类可见
- private:仅对本类可见
- 默认:对本包可见,不需要修饰符
-
Object类是所有类的始祖,每个类都默认扩展了Object。
-
可以使用Object类型的变量引用任何类型的对象
Object obj = new AllClass(); -
在Java中,只有基本类型不是对象,例如数值、字符和布尔类型的值都不是对象。
-
所有的数组类型,不管是对象数组还是基本类型数组都扩展了Object类
Object类中的方法, 用于检测一个对象是否与另一个对象相等.
-
equals():在Object中equals方法实际"ruturn (this==obj)", 实际还是用==进行比较,但是大部分类都会重写父类的equals方法,用来检测两个对象是否相等,例如String重写了equals方法,来比较两个字符串内容是否相同
-
== : 比较引用数据类型时,比较的是地址值。基本数据类型比较两个值是否相同,不能用equals(基本数据类型不是对象,没有方法),只能使用 ==。
- 散列码(hash code)是由对象导出的一个整型值,散列码是没有规律的。不同对象的hash code值基本上不会相同。
- Object类中的hashCode()方法,其值由对象的的存储地址得出
- 如果重新定义了equals方法,那么就必须为用户可能插入散列表的对象重新定义hashCode()方法
- hashCode()方法返回一个整数值,也可能是负数
- Object中还有一个重要的方法,就是toString()方法,他会返回表示对象值的一个字符串。
- 绝大多数toString()方法都遵循这样的格式:类的名字,随后是一对方括号括起来的字段值。
ArrayList
声明数组列表-
[√] ArrayList
staff = new ArrayList (); -
[√] var staff = new ArrayList
(); 使用var关键字可以避免重复写类名 -
[√] ArrayList
staff = new ArrayList<>(); -
[√] var element = new ArrayList<>();会生成一个Object数组
java,util.ArrayList
- boolean add(E obj) 数组末尾添加一个元素,永远返回true
- void add(int index, E obj) 后移元素从而将obj插入到指定索引位置
- int size() 返回当前存储在数组列表中的元素个数
- void ensureCapacity(int capacity)
- void trimSize() 将数组列表的存储容量削减到当前大小
- E set(int index, E obj) 特定位置设置值。并返回之前的值
- E get(int index) 得到值
- E remove(int index) 删除指定索引的值,并返回该元素
- 所有的基本类型都有一个与之对应的类,这些类称为包装器。Integer、Long、Short、Double、Float、Byte、Character、Boolean(前6个派生于超类Number)。
- 定义整型数组列表不能写成ArrayList
,应该这样写:
var list = new ArrayList();
在调用list.add(3)会自动变成list.add(Integer.valueOf(3)), 称为自动装箱autoboxing - 当将一个Integer对象赋值给一个int值时,会自动拆箱,如int n = list.get(i);将自动转换成int n = list.get(i).intValue();
java.lang.Integer
- int intValue() 返回一个int值
- static String toString(int i) 返回一个String的值
- static String toString(int i, int radix) 返回数值指定进制的String值
- static int parseInt(String s) 返回字符串表示的整数
- static int parseInt(String s, int radix) 按进制返回字符串表示的整数
- static Integer valueOf(String s) 返回一个Integer,用字符串s表示的整数初始化
- static Integer valueOf(String s, int radix)



