类的继承:现有类的基础上构建一个新的类,构建出来的类被称作子类,子类可继承父类的属性和方法。

什么时候定义继承?
当类与类之间存在着所属关系的时候,就定义继承。xxx是yyy中的一种==>xxx extends yyy

继承好处:
1,提高代码复用性
2,让类与类之间产生关系,给多态提供前提

单继承:一个子类只能有一个直接父类。
多继承:一个子类可以有多个直接父类(Java中不允许,进行改良)
==>不直接继承,因为多个父类中有相同成员,会产生调用的不确定性
在Java是通过“多实现”的方式来体现

继承的需注意的地方:
1,类只支持单继承,不允许多重继承,但对C++中的多继承机制进行改良。一个子类只能有一个直接父类,如下是错的继承方式
  class A{}
  class B{}
  class C extends A,B{}
2,多个子类可继承一个父类
  class A{}
  class B extends A{}
  class C extends A{}
3,多层继承类(就会出现继承体系)
==>当使用一个继承体系时:
1,查看该体系中的顶层类,了解该体系的基本功能
2,创建体系中的最子类对象,完成功能的使用
  class A{}
  class B extends A{} //类B继承A,B是A的子类
  class C extends B{} //类C继承B,C是B的子类,同是也是A的子类
4,Java中,子类父类只是相对的概念,一个类是父类的同时,也可以是另一个类的子类。如3,:B是C的父类,同时也是A的子类

Example:

 //继承的简单实例
 package new_Object;
 //定义Person类
 class Person_09{
     //定义共有的属性
     String name;
     int num;
     //定义打印方法
     public void printf(){
         System.out.println(name+"\t"+num);
     }
 }
 //学生类
 class Student_1 extends/*继承*/ Person_09{
     /**
     String name;
     int num;
     public void speak(){
         System.out.println(name+"\t"+num);
     }*/
 }
 //工人类
 class Work extends Person_09{
     /**
     String name;
     int num;
     public void speak(){
         System.out.println(name+"\t"+num);
     }*/
 }
 public class Extends_01 {
     public static void main(String[] args) {
         Student_1 stu=new Student_1();
         stu.name="张三";
         stu.num=2015112401;
         stu.printf();
         Student_1 work=new Student_1();
         work.name="李四";
         work.num=1001;
         work.printf();
     }
 }

继承的误区:
class DemoA{
void speak1(){}
void speak2(){}
}
class DemoB extends DemoB{
void speak1(){}
void speak3(){}
}
改良(向上抽取继承)==v
class Demo{
void speak1(){}
}
class DemoA{
//void speak1(){}
void speak2(){}
}
class DemoB extends Demo{
//void speak1(){}
void speak3(){}
}

重写父类:继承关系中,子类自动继承父类中定义的方法,有时需要在子类需要对继承方法改写。
注:在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型

 //重写父类
 package new_Object;
 class Animal_02{
     String name;
     //定义总的动物叫法
     public void shout(){
         System.out.println("种类"+" "+name);
     }
 }
 class Dog_02 extends Animal_02{
     //单独定义狗的叫法
     public void shout(){
         System.out.println(name+" "+"动物发出的叫声:旺旺");
     }
 }
 //定义其他动物类
 class Horse_02 extends Animal_02{}
 class Bird_02 extends Animal_02{}
 public class Example02_Extends {
     public static void main(String[] args) {
         Dog_02 p1=new Dog_02();
         p1.name="小狗";
         p1.shout();/*调用的是子类的shout*/
         //以下调用时父类的shout
         Horse_02 p2=new Horse_02();
         p2.name="马";
         p2.shout();
         Bird_02 p3=new Bird_02();
         p3.name="鸟";
         p3.shout();
     }
 }

面向对象_05【类的继承:extends、重写父类】的更多相关文章

  1. C#和Java的类、继承、重写与多态

    面向对象的三大特性是封装.继承.多态,C#和Java都是面向对象的语言所以他们的类.继承.重写与多态有很多共同点,但是实现上也存在一定的区别.其中Java中其实没有虚函数的概念,也可以认为Java的函 ...

  2. Java面向对象-Java类的继承及super关键字

    Java面向对象-Java类的继承 1,继承定义以及基本使用 定义:子类能够继承父类的属性和方法: 注意点:Java中只支持单继承: 私有方法不能继承: 上代码: package com.java12 ...

  3. php面向对象:类的继承实例讲解

    什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...

  4. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  5. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  6. es6基础:类、继承、重写

    es6真正的引入的面相对象的类,以前我们总是通过其他手段来模拟类这种形式,现在终于有了,我有点开心,又有点难过,因为在我看来,js并不是所谓的面相对象的语言,反而更偏向函数式,原型继承是他真正的面目. ...

  7. 20面向对象三特征 之继承 方法重写 super

    继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...

  8. Objective-c 类的继承 方法重写 方法重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...

  9. python-day6面向对象、类的继承

    @面向对象三大特性:封装encapsulation.继承inheritance.多态(一个接口,多个实现)polymorphism. @面向对象介绍http://www.cnblogs.com/ale ...

  10. Python类总结-继承-子类和父类,新式类和经典类

    子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...

随机推荐

  1. 深度解剖dubbo源码

    -----------学习dubbo源码,能给你带来什么好处?----------- 1.提升SOA的微服务架构设计能力   通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服 ...

  2. Linux(常用命令) 中常用的压缩丶解压缩格式命令和参数详解

    Linux中常用的压缩格式后缀名有:①.zip  ②.gz  ③.bz2  ④.tar.gz  ⑤.tar.bz2 ①.zip后缀名格式 1.压缩 语法: ①zip 压缩文件名 源文件 (压缩文件) ...

  3. 开发高性能JAVA应用程序基础(集合篇)

    集合类在开发中使用非常频繁,使用时合理的选择对提高性能小有帮助.而且大部分面试都会有与集合相关的问题,例如ArrayList和LinkedList的对比. 了解API的集成与操作架构,才能了解何时该采 ...

  4. VueI18n插件的简单应用于国际化

    作为一个前端小白,刚刚接触学习Vue.js框架结合Element-ui组件开发项目.由于最近需要实现国际化功能,在看element-ui的开发文档时,只有简单的引入没有应用实例,对于我这种小白不能ge ...

  5. ex_gcd(个人模版)

    ex_gcd: #include<stdio.h> #include<string.h> using namespace std; int x,y; int ex_gcd(in ...

  6. 教你如何解决Sublime Text 3使用中出现的中文乱码问题

    Sublime Text 3 是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦. 不过Sublime Package Control所提供的插件可以让Sub ...

  7. web 服务器、PHP、数据库、浏览器是如何实现动态网站的

    发送请求:浏览器根据用户输入的域名,运用DNS缓存或请求本地DNS服务器解析等获得对应IP地址,使用HTTP协议发送请求报文(含请求内容.浏览器信息.本地缓存.cookie等) 返回数据:web服务器 ...

  8. 【JAVA】hashcode() & equals()

    平时使用map时都是用JAVA原生的类型,所以很少关注到hashcode()和equals()的方法的内部实现.近期实现一个小工具,涉及到自己写的类的查找比对,又再次重温了相关的知识. 上简单示例代码 ...

  9. c# excel 导入 与 导出(可直接用)

    c#操作excel方式很多 采用OleDB读取EXCEL文件: 引用的com组件:Microsoft.Office.Interop.Excel.dll   读取EXCEL文件 将EXCEL文件转化成C ...

  10. 微信小程序模板消息详解

    先放代码 wxml: <form name='pushMsgFm' report-submit bindsubmit='orderSign'> <view> 单号: 0< ...