第七章:多形性

前言

这一章内容很多 我从中取出三点

目录

1.再谈继承
2.看看接口
3.static内部类&普通内部类

一:再谈继承

1.两种继承

①:普通继承(这里不再说)
举例:你家的青蛙,你给编号为0,1, 2, 3,4; 现在有一个类:青蛙 你想建立一个类表示你家的青蛙,这时候就是普通继承,因为青蛙也要能实例化,你家的青蛙又不全是普通青蛙的属性,多出了一个编号 int 。
重点:父类本身就可以实例化并需要存在,但是你觉得不能完全表达你的意思。
扩展:思考关于Gui编程中,继承窗口组件。
②:抽象继承(主要提到)
举例:形状是一个类,但是每种形状是不需要实例化的,因为实例化了它,没有任何意义。所以它只是一个模板,真正需要的是三角形,四边形,等等。
重点:父类本身不必实例化,父类只需要为子类提供一个填充模板。
扩展:联想list 与 arrayList & linkedList
③:注意
注意:虽然经常提到,但是继承的使用需要谨慎。继承使用的很少!
看法:自己认为的缺点,就是滥用继承,导致代码混乱。结构混乱。

2.代码演示

父类shape
package zero;

public abstract class Shape{
    protected int x;
    protected int y;

    public Shape(int x, int y){
        this.x = x;
        this.y = y;
    }

    public abstract void draw();
}
子类 Square
package zero;

public class Square extends Shape{

    private int width;
    private int height;
    public Square(int x, int y, int width, int height) {
        super(x, y);
        this.width = width;
        this.height = height;
    }

    @Override
    public void draw() {
        System.out.println("我是四边形,其实我不能画:\n" + "我的x:" + x + "   我的y:" + y
                            + "\n我的宽度=" +width + "   我的高度=" + height);
    }
}
子类 Line
package zero;

public class Line extends Shape{

    private int width;
    public Line(int x, int y, int width) {
        super(x, y);
        this.width = width;
    }

    @Override
    public void draw() {
        System.out.println("我是直线,其实我不能画:\n" + "我的x:" + x + "   我的y:" + y
                            + "\n我的长度=" +width);
    }
}
代码调用
public static void main(String[] args) {
    Shape shape = new Square(0, 0, 100, 100);
    shape.draw();

    System.out.println();
    Shape shape1 = new Line(0, 0, 100);
    shape1.draw();
}
输出
我是四边形,其实我不能画:
我的x:0   我的y:0
我的宽度=100   我的高度=100

我是直线,其实我不能画:
我的x:0   我的y:0
我的长度=100

Process finished with exit code 0

二:看看接口

区别:自己认为抽象类比较重量级,并且一个类只能继承一个类,接口比较轻量级,可以实现多个接口,接口默认public,抽象类可以有protected

1.实例1

interface
package zero;

public interface TestInterface {
    void say(String s);
}
实现接口
package zero;

public class Line implements TestInterface{

    @Override
    public void say(String s) {
        System.out.println(s);
    }
}
演示代码
public static void main(String[] args) {
        Line line = new Line();
        line.say("interface");
}

2.实例2(常用)

interface
package zero;

public interface TestInterface {
    void say(String s);
}
实现接口
package zero;

public class Line implements TestInterface{

    @Override
    public void say(String s) {
        System.out.println(s);
    }
}
调用接口
package zero;

public class Square{
    private TestInterface testInterface;
    public Square(TestInterface testInterface){
        this.testInterface = testInterface;
    }

    public void say(){
        testInterface.say("测试会不会改变");
    }
}
测试代码和输出
public static void main(String[] args) {
        Square square = new Square(new Line());
        square.say();
}

output:
测试会不会改变  你觉得呢

Process finished with exit code 0

三:static内部类&普通内部类

引用自:https://zhidao.baidu.com/question/149873207.html

1.静态内部类也叫嵌套类,用这个名字给他定义是更加形象的。意思是说内部类和外部类的关系只是层次嵌套关系,所以只是在创建类文件的时候类文件名是如下形式:outer$inner.java,在使用方面完全和两个普通类一样。

2.一般内部类在我看来才是真正的内部类,他们不仅有着嵌套关系,更重要的是内部类可以获得外部类的引用从而实现回调。而且通过创建内部类还可已让java实现真正的多继承!(interface名叫接口,顾名思义,他就是实现接口的,让一个类继承多个接口实现多继承是不合适的)

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,617评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 饶雪漫说:甜言蜜语说给左耳听… 那些不能说出口的想念该如何是好? 都说想念的声音很美…就像一弯被吹瘦的月亮,一曲美...
    一半姑娘阅读 636评论 0 0
  • 我在向往 逆着河,逆着时光 越过千山阻挡 我只管自由飞翔 我在流浪 逆着血流,逆着海浪 把勇气作桨,我为鸟导航 冲...
    文山鹿阅读 297评论 94 31
  • 一, 幸运的是,我当年做的是新闻工作,有机会接触各式各样的人和事。你感到幸福吗?你认为你值得拥有幸福吗?这样的问题...
    趣读慢时光阅读 725评论 1 6