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
经行判断.












0 0
原创粉丝点击