Java学习笔记(3)

时间:2023-03-08 15:54:19

“当你定义出一组类的父型时,你可以用子型的任何类来填补任何需要或期待父型的位置”

“运用多态时,引用类型可以是实际对象类型的父类”
Animal myDog = new Dog();

三种方法可以防止某个类被作出子类:
(1)第一种是存取控制。就算类不能标记为私有,但它还是可以不标记为公有。非公有的类只能被同一个包的类作出子类。
(2)第二种是使用final这个修饰符。这表示它是继承树的末端,不能被继承。
(3)第三种是让类只拥有private的构造函数。

final修饰符的作用:
如果你想要防止特定的方法被覆盖,可以将该方法标识上final这个修饰符。将整个类标识为final表示没有任何方法可以被覆盖。

遵守合约:覆盖的规则
方法是合约的标志。
(1)参数必须要一样,且返回类型必须要相同。
(2)不能降低方法的存取权限。

抽象类
之所以有抽象类,是因为我们希望某些父类(例如,Animal)不能被初始化为对象,而子类却可以。抽象类代表没有人能够创建出该类的实例。你还是可以使用抽象类来声明为引用类型给多态使用,却不能担心哪个创建该类型的对象,编译器会确保这件事。

Object类型
任何从ArrayList<Object>取出的东西都会被当作Object类型的引用而不管它原来是什么。

instanceof
关键字instanceof,它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。

java的多重继承
java不支持多重继承。java的接口好像是100%纯抽象类,所有接口的方法都是抽象的。

接口的定义
public interface Pet {...}

接口的实现
public class Dog extends Canine implements Pet {...}

设计类、子类、抽象类、接口

  • 如果新的类无法对其他的类通过IS-A测试时,就设计不继承其他类的类。
  • 只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类
  • 当你需要定义一群子类的模板,又不想让程序员初始化此模板时,设计出抽象的类给他们用。
  • 如果想要定义出类可以扮演的角色,使用接口。

如果类带有抽象的方法,则此类必定标识为抽象的。