Java多形性

封装

封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构
同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

继承

继承是为了重用父类代码。两个类若存在"is--a" 的关系就可以使用继承

多态

多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的
方法调用在编程时并不确定,而是在程序运行期间才确定

上溯造型 父类指向子类

父类=====>子类-----(上溯造型)
class Father {
    public int i = 1;
    public void say(){
        System.out.println("我是大头爸爸");
    }
}
class Son extends Father{
    public void say(){
        System.out.println("我是小头儿子");
    }
}

public class Test {
    public static void main(String[] args) {
               Father f = new Son();
               System.out.println(f.i);
               f.say();
    }
}
结果:
我是大头爸爸

下溯造型 父类转子类

public class Test {
    public static void main(String[] args) {
        Father f = new Son();
        Son son = (Son)f;
        son.say();
    }
}
结果:
     我是小头儿子

重写(覆盖)

重写,也称为覆盖,是指派生类重写了基础类的方法。

重载,指一个类里面的方法名相同但是参数列表不同。

过载,指在一个类中拥有多个同名但参数列表不同的方法,这样编译器就可以根据不同的参数来调用不同的方法实现过载。

class InstrumentX {
    public void play(int NoteX) {
        System.out.println("InstrumentX.play()");
    }
}
class WindX extends InstrumentX {
    // OOPS! Changes the method interface:
    public void play(int  NoteX) {
        System.out.println("WindX.play(NoteX n)");
    }
}
public class Main {
    public static void main(String[] args) {
        WindX flute = new WindX();
        flute.play(3);
    }
}
结果:
     WindX.play(NoteX n)

抽象类和方法

// 这就是一个抽象类
abstract class Animal {
    String name;
    int age;
    // 动物会叫
    public abstract void cry(); // 不确定动物怎么叫的。定义成抽象方法,来解决父类方法的不确定性。抽象方法在父类中不能实现,所以没有函数体。但在后续在继承时,要具体实现此方法。
}

// 抽象类可以被继承
// 当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。
class Cat extends Animal {
    // 实现父类的cry抽象方法
    @Override
    public void cry() {
        System.out.println("喵喵喵");
    }
}
class Dog extends Animal {
    @Override
    public void cry() {
        System.out.println("汪汪汪:");
    }
}

 public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat = new Cat();
        cat.cry();

        Dog dog = new Dog();
        dog.cry();
}
结果:
     喵喵喵
     汪汪汪:

总结
1、当父类的某些方法不确定时,可以用abstract关键字来修饰该方法
2、用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法
3、抽象方法不能有方法主体。只有定义,没有实际实现。
4、抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。
5、抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。
6、一旦类中包含了abstract方法,那类该类必须声明为abstract类。

接口

1、它允许创建者规定一个类的基本形式:方法名、自变量列表以及返回类型
2、接口也包含了基本数据类型的数据成员
3、为创建一个接口,请使用 interface 关键字

interface Animal {
    public void eat();
    public void travel();
}
 class Cat implements Animal{

    public void eat(){
        System.out.println("cat eats");
    }

    public void travel(){
        System.out.println("cat travels");
    }

    public int noOfLegs(){
        return 0;
    }

}

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Animal cat = new Cat();
        cat.eat();
        cat.travel();
}
结果:
     cat eats
     cat travels

总结

1、类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
2、类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
3、如果实现接口的类是抽象类,那么就没必要实现该接口的方法。

接口与类相似点:
1、一个接口可以有多个方法。
2、接口文件保存在 .java 结尾的文件中,文件名使用接口名。
3、接口的字节码文件保存在 .class 结尾的文件中。
4、接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口与类的区别:
1、接口不能用于实例化对象。
2、接口没有构造方法。
3、接口中所有的方法必须是抽象方法。
4、接口不能包含成员变量,除了 static 和 final 变量。
5、接口不是被类继承了,而是要被类实现。
6、接口支持多继承。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...
    863cda997e42阅读 649评论 0 1
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,169评论 0 5
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,030评论 0 62
  • 深圳天才知音国学听读机,入选CCTV证券频道的中国优选品牌。 CCTV证券资讯频道《发现品牌》栏目组,响应国家“中...
    逸_53b2阅读 1,078评论 0 0
  • 一,感恩日记 1.感恩父母个了我健康的身体,个了我好的爱,我是伴着爱长大的; 2.感恩公婆一直给我照顾孩子,这些年...
    农夫那阅读 94评论 0 0