JAVA面对象二
来源:互联网 发布:阿国网络随笔风水资料 编辑:程序博客网 时间:2024/06/02 19:09
*继承
继承的出现提高了代码的复用性。继承的出现让类与类之间产生了关系,提供了多态的前提,他们
之间同过extengs来继承!
注意:
千万不要为了获取其他类的功能,简化代码而继承必须是类与类之间有所属关系才可以继承,
不支持多继承,因为继承有安全隐患!
1,JAVA只支持单继承,不支持多继承。
2,一个父类只能有一个父类,不可以有多个父类。
例如:class a extengd b 可以
class a extengd b extend c就不可以以
但是支持多继承
例如:class a
class A{}
•
class B extends A{}
•
class C extends B{}
这个是先初始化对象。
称为:饿汉式。
Single类一进内存,就已经创建好了对象。
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
}
*/
//对象是方法被调用时,才初始化,也叫做对象的延时加载。成为:懒汉式。
//Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)
{
synchronized(Single.class)
{
if(s==null)
s = new Single();
}
}
return s;
}
}
//记录原则:定义单例,建议使用饿汉式。
class
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
只有是is 和a的时候才能被继承!
}
* super关键字:
this和super的用法很相似。
this:代表一个本类对象的引用。
super:代表一个父类空间
this能掉用子类的成员变量,而super能调用父类的成员变量!
*函数覆盖:
子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重 写或者复写。
父类中的私有方法不可以被覆盖。
在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名 获取。
覆盖注意事项:
•
覆盖时,子类方法权限一定要大于等于父类方法权限
•
静态只能覆盖静态。
覆盖的应用:
•
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写 父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内
函数两个特征:
1.重载。同一个类中。(重载和返回值无关)
2.覆盖。子类中。覆盖也称为重写,覆写。override
覆写:
....子类和父类一模一样,返回值类型相同,参数列表一样,函数名一样。
.............如果父类和子类的方法一样则只会运行子类的方法,这就是复写!
.............复写注意事项:
1,子类的权限要大于父类的权限!
2,静态只能覆盖静态的!
3.函数的返回值类型,函数名,都要一样!
..............被final修饰的变量名要全部大写!!
一.继承
1.什么是继承
在定义一个类的时候, 如果需要另一个类的所有功能, 那么就可以继承那个类
子类继承父类之后, 将得到父类的所有功能(父类没有子类的功能)
2.怎么继承
在类名后面使用extends关键字, 然后指定一个父类即可
3.Java继承的特点
Java只支持单继承
可以多重继承, 但不能多继承
*** 4.子类对象实例化的过程
在创建子类对象的时候, 一定会调用父类的构造函数
如果不写构造函数, 或者构造函数中不用this()或super(), 在第一行默认会有一个隐式的super()调用父类无参构造函数
我们也可以使用"super(参数列表)"形式调用父类有参构造函数
注意: 如果父类没有无参构造函数, 那么子类必须显式地写super(参数)调用父类有参的构造函数
5.继承的细节
私有成员不会被子类继承
构造函数不会被子类继承
*** 6.向上转型
子类可以当作父类使用(因为父类有的功能子类都有)
父类不能当作子类使用(因为子类有的功能父类不一定有)
*** 7.子类重写(覆盖)父类方法
在子类中可以定义和父类完全相同(返回值类型, 方法名, 参数列表)的方法, 方法可以定义不同的方法体, 这就叫重写方法
子类一旦重写父类的方法, 那么调用的时候, 就会优先找子类的, 子类没有才会找父类的
如果重写之后还需要调用父类方法, 那么可以使用"super.方法名()"的形式调用
注意: 重写的时候, 如果返回值类型不同, 会报错. 如果访问权限更低, 会报错. (如果抛出更多异常, 会报错)
访问权限修饰符: public > protected > 默认(package, default) > private
使用注解检查覆盖是否成功: 在重写父类的方法时, 可以加上@Override, 如果该方法没有覆盖父类方法, 就会报错
*** 8.类型转换
子类当作父类来用时, 父类变量调用方法其实是调用子类的(如果子类没有再找父类)
但是这种情况下, 父类变量无法调用父类没有的方法(调用没有的方法编译时会报错)
注意: 父类变量引用子类对象时, 访问成员变量找父类的, 访问成员方法找子类的
二.Object类
1.Object类是什么
Object类是Java中所有类的父类, 定义一个类时如果没有继承任何类, 默认继承Object类
Object类中的所有方法, 在任何一个Java类中都继承
* 2.toString()
Object类中有一个toString()方法, 这个方法的作用是把对象转为字符串表示形式
该方法默认返回"类名@地址"形式, 通常我们都会重写这个方法, 返回一个更有意义的字符串, 例如: 把对象的属性拼接成一个字符串
System.out.println()方法打印一个对象的时候, 其实就是先调用对象的toString()得到一个字符串, 然后把这个字符串显示到控制台
如果我们希望System.out.println()能打印出对象的属性, 那么就可以在类中重写toString()方法
如果使用一个String和一个对象做"+"运算, 那么得到的结果就是这个String和对象toString()返回值相加的结果
3.finalize()
该方法也是Object类的一个方法, 所有类都会继承
该方法在对象成为垃圾, 被虚拟机销毁的时候自动执行
System.gc()可以立即回收垃圾
*** 4.equals()
equals()方法同样是Object类中定义的一个方法, 用来比较两个对象
Object类中默认比较的是对象的地址
通常我们比较对象时是比较成员变量是否完全相同, 那么就可以重写该方法, 在方法内部比较成员变量
三, 多态: 好处是提高了程序的扩展性,弊端是通过父类引用操作子类对象时,只能使用
父类已有的方法,不能操作子类特有的方法!
...............多态: 子类的方法如何调用呢?
1,Aninal a=new Dog();//Aninal是父类型,new Dog()是子对象.
2,但是父类型引用指向子类对象时,这既是让子类对象经行了类型的提升(向上转型).
3,向上转型的好处是,提高了扩张性,隐藏了子类型,弊端;是不能使用子类的特有方法!
4,如果想使用子类的特有的方法,只有子类型可以用!
5,可以向下转型,强制转换.
6,Dog d=(Dog)a;//将a转型为Dog型!
7,总结:1,什么时候使用向上转型呢?
答:需要用子类子类的特有方法吗?不需要时就用向上转型!
2,什么时候使用向下转型呢?
答:当需要使用子类型的特有方法时,但是一定要使用关键字,instanceof
经行判断.
- JAVA面对象二
- JAVA之面对象
- java面对象四
- java 面对象的思想
- 面对象
- 面对象实例
- java--------学习之《面对像二》
- 事件驱动的JScript面对象编程
- 事件驱动的JScript面对象编程
- 事件驱动的JScript面对象编程
- 【设计模式】面对象王朝六元老
- Java面象对向的基本思想(二)
- 黑马程序员——Java面对对象(二)
- Java学习笔记初级(二)-面对对象
- CSS初印象【二】
- 事件驱动的JScript面对象编程(例)
- 事件驱动的JScript面对象编程(例)
- 事件驱动的JScript面对象编程(例)
- 图算法领域10大经典算法
- Sparse Table算法(求解RMQ)
- RUP:初始阶段
- android中的ellipsize
- [脚本]结合轮廓显示,实现完整的框选目标(附Demo代码)
- JAVA面对象二
- 深入Java核心 探秘Java垃圾回收机制
- android 常见异常
- Windows XP即将谢幕,windows对外企非管理员用户本来不算安全
- 创建动态链接库 (DLL)
- PPTP + FreeRADIUS + MySQL 安装与配置
- RMQ(需要转化一下)uva11235
- 黑马程序员_java运算入门
- 项目过程中遇到的关于C的小问题