重学Java—继承

*小笔记:
反射:是指程序运行期间发现更多的类及其属性的能力。
超类(=基类=父类) (子类=派生类=孩子类)
Java不支持多重继承。
子类也不能访问超类的私有域。

super与this

当我们希望调用超类中的某个方法,而不是当前子类中的这个方法,为此可以用super解决这个问题。
super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字。

使用super调用构造器的语句必须是子类构造器的第一条语句。
若子类构造器没有显示调用超类中的构造器,则将自动调用超类默认(没有参数)的构造器;若超类没有不带参数的构造器,而子类构造器又没有显示地调用超类的其他构造器,则Java编译器将报告错误。

继承层次

由一个公共超类派生出来的所有类的集合被称为继承层次(inheritance hierarchy)。

抽象类

理解:面向对象中,所有对象都是用类来描述的,但不是所有的类都用来描述对象。若一个类中没有足够的信息来描述对象的话,这样的类就是抽象类。
–>抽象方法:用abstract关键字修饰的方法。
定义:包含抽象方法的类就是抽象类(其实只要用abstract关键字修饰的类也是抽象类,不一定必须包含抽象方法,稍微注明这点)。
1、因为抽象类中包含无具体实现的抽象方法,所以抽象类不能被实例化,所以抽象类必须被继承!!!!!ps:一个类只能继承一个抽象类,但能实现多个接口。
2、抽象类除了有抽象方法外,和普通类没有不同,一样有构造器、成员变量和成员方法。若一个类包含抽象方法,则必是抽象类。
3、子类必须重写实现父类的抽象方法,否则必须声明自身为一个抽象类。不然从父类到子类都不能用来实例化对象。
4、构造方法、类方法(用static修饰的)不能声明为抽象方法。

!!!那么抽象类的作用或者说是好处是什么?
理解一下:首先抽象类是为了继承是为了派生扩展功能;其次,写成抽象类,看代码的时候就会注意抽象方法,而且知道这个抽象方法是在子类实现的,就是个提示作用。

枚举类

//假如有个枚举类如下:
public enum Size{SMALL,MEDIUM,LARGE};
//每个枚举类型都有一个静态的values方法,返回一个包含全部枚举值的数组
Size[] values=Size.values();
//ordinal方法返回enum声明中枚举常量的位置,从0开始计数
Size.Medium.ordinal()返回1.

反射

反射库(reflection library)–>编写能够动态操纵Java代码的程序。
使用反射,当在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。
能够分析类能力的程序称为反射(reflective),反射机制功能强大:
1. 运行时分析类的能力;
2. 运行时查看对象:例如编写一个toString()方法供所有类使用;
3. 实现通用的数组操作代码;
4. 利用Method对象。
反射是一种功能强大且复杂的机制。 使用它的主要人员是工具构造者, 而不是应用程序员。

继承技巧

1、将公共域和操作放在超类;
2、不要使用受保护的域;
第一,子类集合是无限制的, 任何一个人都能够由某个类派生一个子类,并编写代码以直接访问 protected 的实例域, 从而破坏了封装性。第二, 在 Java 程序设计语言中,在同一个包中的所有类都可以访问 proteced 域,而不管它是否为这个类的子类。不过,protected 方法对于指示那些不提供一般用途而应在子类中重新定义的方法很有用。
3、除非所有继承的方法都有意义, 否则不要使用继承;
4、不要过多地使用反射。
反射是很脆弱的,即编译器很难帮助人们发现程序中的错误, 因此只有在运行时才发现错误并导致异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值