多态 抽象 借口

    1)多态

            1)多态的存在是降低代码之间的耦合性

            2)如果一个方法的参数类型是一个类,在在调用这个方法时,传入的参数可以是该类的对象,也可以是该类子类的对象。

            3)如果一个方法的返回值类型是个类,在调用该方法时,返回值可以是该类的对象,也可以是该类子类的对象。

public class Animal{
    public void eat(){
        System.out.println("动物吃");
    }
}


public class Dog extends Animal{
    public void eat(){
        System.oun.println("狗吃");
    }

    public void run(){
        System.out.println(""狗跑):
    }
} 


public class Test{
    public static void main(String[] args){
        Animal a = new Dog();
        a.eat();
    }
}

    上例中是用父类变量指向子类对象,只能调用父类的方法,当子类将父类的方法重写后,将会调用子类的该方法。子类中特有的方法不能被调用。

 

    2)抽象方法,抽象类

            抽象方法:没有方法体,用abstract修饰的方法,

            抽象类:含有抽象方法的类叫做抽象类,也用abstract修饰。eg:

public abstract class Animal{
    public abstract eat(参数列表);
}

     关于抽象类或抽象方法的几个要点:1)抽象类可以有属性和非抽象方法;2)抽象类不能被new,即不能被实例化;3)当一个类继承一个抽象类时,必须实现这个抽象类的抽象方法,除非该类也是抽象类;4)抽象类本身的作用就是被继承;5)抽象方法不能使用private。

 

    3)接口:只能含有抽象方法,不能被实例化。

关于接口,可以对比多态来学习和理解:1)如果一个方法的参数类型是一个接口类型,在在调用这个方法时,传入的参数是实现该接口的对象。

                                                  2)如果一个方法的返回值类型是个接口类型,在调用该方法时,返回值可以是实现该接口的对象。   

                                                  3)一个类可以实现多个接口。

                                                  4)接口中没有构造方法

                                                  5)接口之间可以相互继承,即接口间可以使多继承

最后给一个关于理解接口的程序例子  

package oct_17_2;

public interface Usb {
	public void start();
	public void end();
}

public interface Store {
	public void store();
}

package oct_17_2;

public class Udisk implements Usb,Store{

	@Override
	public void store() {
		System.out.println("向优盘存储数据");
	}

	@Override
	public void start() {
		System.out.println("优盘已启动");
	}

	@Override
	public void end() {
		System.out.println("优盘可安全弹出");
	}
	
}

package oct_17_2;

public class Phone implements Store,Usb{

	@Override
	public void start() {
		System.out.println("手机已连接电脑");
	}

	@Override
	public void end() {
		System.out.println("手机已安全弹出");
	}

	@Override
	public void store() {
		System.out.println("手机正在存储");
	}
	

}


package oct_17_2;

public class Pc {
	public void runUsb(Usb usb){
		usb.start();
		usb.end();
	}
	
	public Usb getX(){
		return new Udisk();
	}
	
	public void runStore(Store store){
		store.store();
	}
}

package oct_17_2;

public class Test {

	public static void main(String[] args) {
		Pc p = new Pc();
		Udisk u = new Udisk();
		p.runUsb(u);
		p.runStore(new Phone());
         }
}

 运行结果:



 这一部分的知识,很大一部分都是靠理解,甚至记忆的,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值