Java 接口、集成与多态

1、类的继承

基本思想:基于某个父类的扩展,制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原来父类所不具备的属性和方法,或者直接重写父类中的某些方法。在Java中使用exdends关键字来表示两个类的继承关系。

父类:

class Test{

public Test(){                       //构造方法

//Somesentence

}

protected void doSomething(){      //成员方法

//SomeSentence

}

protected Test doIt(){     //方法返回值为Test类型

return new Test();

}

}

子类:

class Test2 extends Test{       //继承父类

public Test2()            //构造方法

{

super();              //调用父类构造方法

super().doSomething();      //调用父类成员方法;

}

public void doSomethingNew(){}  //新增方法

public void doSomething(){}          //重写父类方法

protected Test2 doIt(){return new Test2();}  //重写父类方法,方法返回来行为Test2类型

}

继承并不只是扩展父类的功能,还可以重写父类的成员方法,重写(还可以成为覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,或者修改成员方法的返回值类型(J2SE.50以上版本:并且需要遵循一个原则:即重写的返回值类型必须是父类中同一方法返回值类型的子类。test2是test的子类)。在继承中还有一种特殊的重写方式,子类与父类的成员方法返回值、方法名称、参数类型以及个数完全相同,唯一不同的是方法实现内容,这种特殊的重写方式被称为重构。

tips:当重写方法书,修改方法的修饰权限只能从小的范围到大的范围改变。例如、父类中的doSomething()方法修饰权限为protected,集成猴子类中的方法只能改为public。

在java中,一切都以对象的形式进行处理,在继承机制中,创建一个子类对象,将包含一个父类子对象,这个对象与父类创建的对象是一样的。两者的区别在于后者来自外部,而前者来自子类对象的内部。当实例化子类对象是,父类对象也相应被实例化,换句话说,在实例化子类对象是,Java编译器会在子类的构造方法中自动调用父类的无参构造方法如下

class A{
public A(){System.out.println("初始化A");}
}
class B extends A{
public B(){System.out.println("初始化B");}
}
public class C extends B{
public read_url(){
System.out.println("初始化C");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
C c=new  C();
}
}

输出:


but:有参构造方法并不能被自动调用,只能依赖于super关键字显示的调用父类的构造方法

tips:如果使用finalize()方法对对象进行清理,需要确保子类的finalize()方法的最后一个动作是调用父类的finalize()方法,以保证垃圾回收对象占用内存时,对象的所有部分都能正常终止。

2、Object类

object类:在java中,所有的类都直接或者间接继承了java.lang.Object类,由于所有的类都是Object子类,所以再定一类是圣罗了extends Object关键字

Object类中的getClass()、notify()、notifyAll()、wait()不能重写,因为他们被定义为final类型

(1)getClass()方法:他会返回对象执行是的Class实例,然后使用此实例调用getName()方法可以获得此类的名称。可以将其与toString()方法联合使用

(2)toString()方法的功能是将一个对象返回为字符串形式,他会返回一个S听类型。

(3)equals()方法:比较的是两个对象的实际内容,默认使用"=="运算符比较两个对象的引用地址,而不是比较对象的内容,所以想要真正的做到比较两个对象的内容,需要在自定义类中重写equals()方法:String类中的equals方法比较的是两个对象引用所指的内容是否相等

使用instanceof操作符:判断是否一个类实现了某个街口,也可以用它来判断一个是类对象是否属于一个类。


3、方法的重载

方法的重载就是在同一个类中允许同时存在以个以上的同名方法,只要这些方法的参数个数或者类型不同即可。它起源于构造方法,但是也可以应用到其他方法中去。

public class read_url{
public static int add(int a,int b){ //定义一个方法
return a+b;
}
//定义域第一个方法相同的名称,但是参数类型不同的方法
public static double add(double a,double b){
return a+b;
}
public static int add(int a){ //第一与第一个方法参数不同的方法
return a;
}

public static int add(int a,double b){ //定义一个成员方法
return 1;

//这个方法遇上一个方法参数次数不同
public static int add(double a,int b){
return 1;
}
public static void main(String args[]){
System.out.println("调用add(int,int)方法"+add(1,2));
System.out.println("调用add(double,double)方法"+add(2.1,3.3));
System.out.println("调用add(int)方法"+add(1));
}
}


所以:参数类型不同;参数顺序不同;参数个数不同都可以构成重载。注意:虽然在方法重载中可以是两个方法的返回值不同,但是只有返回值不同并不足以区分两个方法的重载,还需要通过参数的个数以及参数的类型来设置。

4、多态

public class read_url{
public void darw(read_url r){
System.out.println("123");
}
public static void main(String args[]){
read_url r=new read_url();
r.darw(new A());
r.darw(new B());
}
}
class A extends read_url{
public A(){
System.out.println("平行四边形");
}
}
class B extends read_url{
public B(){
System.out.println("正方形");
}
}

从以上代码可以看出,以不同的类对象调用draw()方法可以处理不同的图形问题。使用多台节省了开发和维护时间。同时只要实例化一个继承父类的子类对象及可调用相应的方法,这里只要维护父类中这个方法即可


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值