第五章 继承
- 在Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承
- Java同C++一样,子类不能直接访问基类的私有成员,必须通过公有接口访问
- C++和Java构造器中构造基类的不同,Java写在函数内,C++写在函数外
Java使用super
调用基类构造器:
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day); //必须放在子类构造器的第一条语句
bonus = 0
}
C++使用初始化列表调用基类构造函数:
Manager::Manager(String n, double s, int year, int month, int day):Employee(n,s,year,month,day)
{
bonus = 0;
}
- 判断类类型
可用instanceof
运算符(注意子类instanceof
基类 结果也为真)
也可用Object.getClass()
- 抽象方法的声明
public abstract String getDescription();
拥有抽象方法的类必须被声明为抽象类
- 所有类的超类Object中
equals()
方法详解:
在子类没有覆盖equals
时,equals
的作用等同于==
,即比较两个引用是否指向同一对象(同一地址)
equals
的真正作用是可以被子类重写,比较两对象的内容是否相等 - 从
Object
中继承toString()
,该方法是对该类的字符串描述,需要在子类中覆盖,程序员手工填写,在以下两种情况下自动调用toString()
- 在
System.out.println( x )
中自动调用x.toString()
- 将x与
String str
相加时:也就是说所有x.toString()
都可以用""+x
替代
- 若想在子类中写一个覆盖基类的方法,则可在方法前加上@override,这样若没有覆盖成功则报错
第六章 接口与内部类
- 接口中所有的方法都自动属于public
- 一个类实现多个接口时,使用逗号连接接口,如
class Employee implements Cloneable, Comparable
- 标记接口如
Cloneable
没有任何方法和属性(因为clone
函数是从Object
中继承的),只是表明该类拥有某些功能,并且可以用if(Obj instanceof Cloneable)
做判断 - java可以返回局部对象的引用,因为只要有引用指向某个对象,该对象就不会被gc销毁
- 接口也可以继承(扩展)接口
public interface facename1 extends facename2
- 内部类既可以访问自身的数据域也可以访问创建他的外围类对象的数据;可以显示的写为(
outer.data
) - 定义在类的函数中的内部类称为 局部类 ,局部类不能为
public
或private
- 局部类可以访问外围变量,但外部不可以访问局部类
- 匿名内部类应用场景:创建一个只使用一次的类;
声明后紧跟着内部实现就是匿名内部类,如:
Person count = new Person("Dracula"){......}
- 静态内部类的对象不可访问外围类对象,与其他所有内部类完全一样。
-
ArrayList
的用法,当声明ArrayList<Integer>
时只能存放Integer等引用类型, 而不可声明为int
,float
等基本数据类型,只能存放对象
当不指定数据类型时,其内部可以存放不同数据类型