Java学习笔记-继承
2016-03-16 22:36
337 查看
一、多态
---1》对象变量是多态的:
一个类对象既可以引用本类对象,也可以引用子类对象:Employee
e;e=new Employee()或e=new Manager();
--->这种多态不能反转
---2》动态绑定:
****再覆盖一个方法是,子类方法不能低于超类方法的可见性,即,超类是public,子类必须是public(而不能是private)
---3》阻止继承:final的类和方法
---4》强制类型转换
****只能在继承层次内进行转换
****将超类转换成子类之前,应该使用instanceof进行检查
---5》抽象类
****位于最顶层的类实际上更具有通用性,此时我们只需要这样一个作为派生其他类的基类,而不作为实例类。(只有壳没有内容)
****为了清晰度,包含抽象方法的类必须是抽象类
****抽象方法只声明,并不实现内容,即只是为了占个位置,让子类去继承。
****抽象类不能被实例化。
**《是否可以省略抽象类的抽象方法》**
----不能,由于persion
p=new Student();此时类persion引用一个Student对象,当通过p.getname()来调用Student的姓名时,由于persion没有getname方法,会出现错误!!
二、Object:所有类的超类
---1》equals()方法:判断两个对象是否具有相同的引用
---2》hashCode()方法:由于散列码是由本身内容决定,所以equals相同,hashCode一定相同,而反过来却不一定。
---3》如果重新定义equals方法,就必须重新定义hashCode方法,以便用户将对象插入到散列表中。
三、对象包装器与自动装箱
---1》8个基本类型的引用类型就是包装器(如Integer、Double)
---2》自动装箱规范要求boolean、byte、char<=127,以及介于-128~127之间的short、int被包装到固定对象
例:Integer a=1000;integer b=1000;结果是a!=b;
但将1000改为100就成立,因为1000不在固定包装对象中,所以ab会同时构造两个值为1000的integer对象。
《拆箱和装箱是编译器认可的,而不是虚拟机》
---3》将字符串转化为整型:int
x=Integer.parseInt(s);
---4》参数数量可变的方法:
****int
method(double...values),三个点表示有多个参数
四、反射
---1》反射库提供了大量的工具类,以便能够动态操作Java代码,这个功能被大量使用于javabeans中,能够分析类能力的程序称为反射。
---2》object类的getClass()方法会返回一个**Class类型**的实例
如:Employee
e;Class c1=e.gteetClass();
---3》getName()方法返回类的名字
如:e.getClass().getName(Sting
s);
---4》还可以调用forName()方法获取类名对应的Class对象
如:Class
c1=Class.forName("java.util.Date");
---5》快速创建类的实例newInstance()方法
如:e.getClass.newInstance();或Class.foeName("string").newInstance()
---6》捕获异常(待补充)
五、继承的设计技巧
---1》将公共操作和域放在超类
---2》不要使用受保护的域
---3》使用继承实现“is-a”关系
---4》除非所有的继承方法都有意义,否则不要使用继承
****由于子类会继承超类的所有方法,当超类存在会破坏子类规范的方法时,子类的使用可能会出现错误
如:persion会走会跑,cat继承persion这些方法是对的,但人有讲话方法say,当使用cat.say()时,使用是对的,但不符合逻辑。
---5》再覆盖方法时,不要改变预期的行为
****只是个建议:是为了让方法单词所表达的意思尽量和逻辑一致,如定义一个mytime()方法,继承time方法,当操作mytime()-time()时,应该得出一个计算数值,二当我们改变mytime()的返回方法为persion时,这就不复合逻辑了《其实关键在于不偏离最初的设计就行》
---6》使用多态,而非类型信息(缩减代码量)
---7》不要过多的使用反射
--反射适用于编写系统程序,但不适用于编写应用程序
---1》对象变量是多态的:
一个类对象既可以引用本类对象,也可以引用子类对象:Employee
e;e=new Employee()或e=new Manager();
--->这种多态不能反转
---2》动态绑定:
****再覆盖一个方法是,子类方法不能低于超类方法的可见性,即,超类是public,子类必须是public(而不能是private)
---3》阻止继承:final的类和方法
---4》强制类型转换
****只能在继承层次内进行转换
****将超类转换成子类之前,应该使用instanceof进行检查
---5》抽象类
****位于最顶层的类实际上更具有通用性,此时我们只需要这样一个作为派生其他类的基类,而不作为实例类。(只有壳没有内容)
****为了清晰度,包含抽象方法的类必须是抽象类
****抽象方法只声明,并不实现内容,即只是为了占个位置,让子类去继承。
****抽象类不能被实例化。
**《是否可以省略抽象类的抽象方法》**
----不能,由于persion
p=new Student();此时类persion引用一个Student对象,当通过p.getname()来调用Student的姓名时,由于persion没有getname方法,会出现错误!!
二、Object:所有类的超类
---1》equals()方法:判断两个对象是否具有相同的引用
---2》hashCode()方法:由于散列码是由本身内容决定,所以equals相同,hashCode一定相同,而反过来却不一定。
---3》如果重新定义equals方法,就必须重新定义hashCode方法,以便用户将对象插入到散列表中。
三、对象包装器与自动装箱
---1》8个基本类型的引用类型就是包装器(如Integer、Double)
---2》自动装箱规范要求boolean、byte、char<=127,以及介于-128~127之间的short、int被包装到固定对象
例:Integer a=1000;integer b=1000;结果是a!=b;
但将1000改为100就成立,因为1000不在固定包装对象中,所以ab会同时构造两个值为1000的integer对象。
《拆箱和装箱是编译器认可的,而不是虚拟机》
---3》将字符串转化为整型:int
x=Integer.parseInt(s);
---4》参数数量可变的方法:
****int
method(double...values),三个点表示有多个参数
四、反射
---1》反射库提供了大量的工具类,以便能够动态操作Java代码,这个功能被大量使用于javabeans中,能够分析类能力的程序称为反射。
---2》object类的getClass()方法会返回一个**Class类型**的实例
如:Employee
e;Class c1=e.gteetClass();
---3》getName()方法返回类的名字
如:e.getClass().getName(Sting
s);
---4》还可以调用forName()方法获取类名对应的Class对象
如:Class
c1=Class.forName("java.util.Date");
---5》快速创建类的实例newInstance()方法
如:e.getClass.newInstance();或Class.foeName("string").newInstance()
---6》捕获异常(待补充)
五、继承的设计技巧
---1》将公共操作和域放在超类
---2》不要使用受保护的域
---3》使用继承实现“is-a”关系
---4》除非所有的继承方法都有意义,否则不要使用继承
****由于子类会继承超类的所有方法,当超类存在会破坏子类规范的方法时,子类的使用可能会出现错误
如:persion会走会跑,cat继承persion这些方法是对的,但人有讲话方法say,当使用cat.say()时,使用是对的,但不符合逻辑。
---5》再覆盖方法时,不要改变预期的行为
****只是个建议:是为了让方法单词所表达的意思尽量和逻辑一致,如定义一个mytime()方法,继承time方法,当操作mytime()-time()时,应该得出一个计算数值,二当我们改变mytime()的返回方法为persion时,这就不复合逻辑了《其实关键在于不偏离最初的设计就行》
---6》使用多态,而非类型信息(缩减代码量)
---7》不要过多的使用反射
--反射适用于编写系统程序,但不适用于编写应用程序
相关文章推荐
- Spring中常用的hql查询方法(getHibernateTemplate())
- Spring AOP(二)——在XML中配置切面
- java中时间24小时和12小时设置
- 二进制 源码 反码 补码 只需存在 补码
- java如何利用反射机制调用类的私有方法
- [置顶] eclipse android程序运行报错:Conversion to Dalvik format failed: Unable to execute dex:
- 运行Eclipse出错:Failed to load the JNI shared library
- spring笔记--事务管理之声明式事务
- Java 多线程(六)——进程间通信与线程间通信
- Struts1的实现原理
- JAVA中的反射机制
- Java多线程安全问题及解决方案
- Java内存溢出与内存泄漏
- Java 多线程(五)——线程通信(共享内存、管道流、wait()、notify()等)
- JSP Servlet JavaBean 三者的联系和分工
- java泛型
- SpringMvc环境搭建
- maven 项目出现 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Java之泛型——实践准则
- JAVA学习路线