Java面向对象   继承(下)

知识概要:

              (1)抽象类

1.1 抽象类概述 

                          1.2 抽象类的特点 

                          1.3 抽象类举例代码讲解 

                          1.4 抽象类相关问题

              (2)模板方法模式

2.1 模板设计模式的概念

2.2 模板设计模式的演示

              (3)接口

                         3.1 接口的格式

3.2 接口的特点

              (4)多态



(1)抽象类

抽象类概述

 抽象定义:

      •  抽象就是从多个事物中将共性的,本质的内容抽取出来。

      •  例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。

 抽象类:

      •  Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类

就是抽象类。

 抽象方法的由来:

      •  多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取

功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。

      •  例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明

确吼叫的细节。

抽象:看不懂的功能内容。

抽象类的特点:

        1,抽象方法一定在抽象类中。

        2,抽象方法和抽象类都必须被abstract关键字修饰。

        3,抽象类不可以用new创建对象。因为调用抽象方法没意义。

        4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。

        如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。

抽象类和一般类没有太大的不同。

       该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。

       这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。通过抽象方法来表示。

抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法,抽象类不可以实例化。

特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

abstract class Student
{
abstract final void study(); void sleep()
{
System.out.println("躺着");
}
} class ChongCiStudent extends Student
{
void study()
{
System.out.println("chongci study");
}
} class BaseStudent extends Student
{
void study()
{
System.out.println("base study");
}
} class AdvStudent extends Student
{
void study()
{
System.out.println("adv study");
}
} class AbstractDemo
{
public static void main(String[] args)
{ new BaseStudent().study();
}
}

抽象练习:

<span style="font-size:18px;">/*
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
法进行属性访问。 员工类:name id pay 经理类:继承了员工,并有自己特有的bonus。 */ abstract class Employee
{
private String name;
private String id;
private double pay; Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
} public abstract void work(); } class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manager work");
}
} class Pro extends Employee
{
Pro(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("pro work");
}
} </span>

abstract 关键字,和哪些关键字不能共存?

          final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。

private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写,而抽象方法出现的就是需要被复写

static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了,可是抽象方法运行没意义。

抽象类中是否有构造函数?

        有,抽象类是一个父类,要给子类提供实例的初始化。

(2)模板方法模式

需求:获取一段程序运行的时间。

原理:获取程序开始和结束的时间并相减即可。

获取时间:System.currentTimeMillis();

当代码完成优化后,就可以解决这类问题。

这种方式,模版方法设计模式。

什么是模版方法呢?

        在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,

        那么这时就将不确定的部分暴露出去。由该类的子类去完成。

abstract class GetTime
{
public final void getTime()
{
long start = System.currentTimeMillis(); runcode(); long end = System.currentTimeMillis(); System.out.println("毫秒:"+(end-start));
}
public abstract void runcode(); } class SubTime extends GetTime
{ public void runcode()
{ for(int x=0; x<4000; x++)
{
System.out.print(x);
}
}
} class TemplateDemo
{
public static void main(String[] args)
{
//GetTime gt = new GetTime();
SubTime gt = new SubTime();
gt.getTime();
}
}

(3)接口讲解

       格式:

          interface { }

     接口中的成员修饰符是固定的。

         •成员常量:public static final

         •成员函数:public abstract

记住:接口中的成员都是public的。

接口:是不可以创建对象的,因为有抽象方法。

                需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。

                否则子类是一个抽象类。

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

                接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。

interface Inter
{
public static final int NUM = 3;
public abstract void show();
} interface InterA
{
public abstract void show();
} class Demo
{
public void function(){}
} class Test extends Demo implements Inter,InterA
{
public void show(){}
} interface A
{
void methodA();
}
interface B //extends A
{
void methodB();
} interface C extends B,A
{
void methodC();
} class D implements C
{
public void methodA(){}
public void methodC(){}
public void methodB(){}
} class InterfaceDemo
{
public static void main(String[] args)
{
Test t = new Test();
System.out.println(t.NUM);
System.out.println(Test.NUM);
System.out.println(Inter.NUM); }
}

     抽象类和接口异同:

     相同:

    1,都可以在内部定义抽象方法。

    2,通常都在顶层。

3,都不可以实例化,都需要子类来实现。

不同点:

1,抽象类中可以定义抽象方法和非抽象方法,而接口中只能定义抽象方法。

   2,接口的出现可以多实现。 抽象类只能单继承。 也就是说:接口的出现避免了单继承的局限性。

   3,继承和实现的关系不一致。继承:is a,实现:like a

(4)多态

多态:可以理解为事物存在的多种体现形态。

人:男人,女人

动物:猫,狗。

猫 x = new 猫();

动物 x = new 猫();

1,多态的体现

父类的引用指向了自己的子类对象。

          父类的引用也可以接收自己的子类对象。

     2,多态的前提

          必须是类与类之间有关系。要么继承,要么实现。

          通常还有一个前提:存在覆盖。

3,多态的好处

          多态的出现大大的提高程序的扩展性。

4,多态的弊端:

          提高了扩展性,但是只能使用父类的引用访问父类中的成员。

5,多态的应用

在多态中成员函数的特点:



        1.在编译时期:   参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。

2.在运行时期:   参阅对象所属的类中是否有调用的方法。

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

在多态中,成员变量的特点:

        无论编译和运行,都参考左边(引用型变量所属的类)

        在多态中,静态成员函数的特点:

无论编译和运行,都参考做左边。

/*
需求:
电脑运行实例,
电脑运行基于主板。
*/ interface PCI
{
public void open();
public void close();
} class MainBoard
{
public void run()
{
System.out.println("mainboard run ");
}
public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
{
if(p!=null)
{
p.open();
p.close(); }
}
} class NetCard implements PCI
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
method();
} }
class SoundCard implements PCI
{
public void open()
{
System.out.println("SoundCard open");
}
public void close()
{
System.out.println("SoundCard close");
}
}
/*
class MainBoard
{
public void run()
{
System.out.println("mainboard run");
}
public void useNetCard(NetCard c)
{
c.open();
c.close();
}
} class NetCard
{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
}
}
*/ class DuoTaiDemo5
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard()); }
}

       





Java面向对象 继承(下)的更多相关文章

  1. Java面向对象 继承(上)

       Java面向对象 继承 知识概要:         (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...

  2. Java面向对象㈡ -- 继承与多态

    Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...

  3. java面向对象--继承与多态

    可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...

  4. java面向对象程序设计(下)-接口的定义

    抽象类是从多个类中抽象出来的模板,如果将这种抽象进行得更加彻底,则可以提炼出一种更加特殊的"抽象类"-接口(interface),Java9对接口进行了改进,允许在接口中定义默认方 ...

  5. java面向对象程序设计(下)-枚举类

    在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象;再比如行星类,目前只有8个对象,这些实例有限而且固定的类,在Java中被称为枚举类 JDK1.5新增了一个enum关键字,(它与 ...

  6. JAVA面向对象-----继承

    类和类之间的常见关系. 既然继承是描述类和类之间的关系,就需要先来了解类和类之间的常见关系 现实生活的整体与部分 举例说明 现实生活 学生 是人 狗 是动物 球队 包含 球员 整体与部分的关系,部分可 ...

  7. Java面向对象—继承

    概述: 1.多个类相同的属性和功能抽取成另一个类, 让具有特有功能的类继承这个类. 2.通过 extends 关键字可以实现类与类的继承 格式: class 子类名 extends 父类名 {} 特点 ...

  8. java 面向对象 — 继承

    继承中的构造方法,先执行父类中的构造方法,然后执行子类中的构造方法 继承中的属性,最后执行的属性 覆盖前面的属性 因为是开辟了 两个内存空间,所以相比较是不同的. 如果想比较两个对象的值是否相同的话, ...

  9. Java面向对象----继承概念,super关键字

    继承概念: 继承需要符合的关系  is-a  , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现 组合体现 实现接口体现 继承的意义 代码重用 体现不同抽象层次 extends关键字 Sup ...

随机推荐

  1. 第1阶段——uboot分析之启动函数bootm命令 (9)

    本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0"中怎么实现bootm命令 ...

  2. 开源项目Druid的提取SQL模板

    在数据库审计中,常常用到SQL模板,这样提取一次模板,下一次就不用对相同的模板的SQL进行相关操作.对此Druid提供相应的工具类进行SQL模板提取: package com.dbappsecurit ...

  3. 结对作业1--基于GUI的四则运算

    201421123002 翁珊,201421123006 黄月梅,201421123007 徐晓珊 题目描述: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程 ...

  4. 微信小程序简单入门理解

    简单的小程序示例结构: (一):理解小程序结构app.js,app.json,app.wxss ①app.js,app.json是小程序结构必要的部分,app.wxss可选择 ②app.js用于创建小 ...

  5. Swing-setOpaque()用法-入门

    先看API: public void setOpaque(boolean isOpaque) 如果为 true,则该组件绘制其边界内的所有像素.否则该组件可能不绘制部分或所有像素,从而允许其底层像素透 ...

  6. 201521123009 《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 Q1:ArrayList代码分析 1.1 解释ArrayList的contains源代码 //contains()方法 public boolean contain ...

  7. 201521123035《Java程序设计》第四周学习总结

    本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 本周还讲了注释与类设计.老师用例子向我们展示实际生活中一个类里面包含了哪些属性,并由此联想到如果自 ...

  8. 201521123099 《Java程序设计》第4周学习总结

    1. 本周学习总结 2. 书面作业 注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 面向对象设计(大作业1,非常重要) 2.1 将在网上商城购物或 ...

  9. 201521123109《java程序设计》第三周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...

  10. Python笔记2.1

    所有类型如下图: 一 基础数据类型 1)数字类型 复制代码 >>> 2/2+2*2 5.0 >>> (50-5*6)/4 5.0 >>> 8/5 ...