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());
}
}
运行结果:
这一部分的知识,很大一部分都是靠理解,甚至记忆的,加油!