一、继承的基本概念:

1.继承是面向对象三大特征之一

2.被继承的类成为父类(超类),继承父类的类成为子类(派生类)

3.继承是指一个对象直接使用另一个对象的属性和方法

4.通过继承可以实现代码重用

举个例子:

  1. public class Practice14 {
  2.  
  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. Dog dog=new Dog("花花");
  9. dog.print();
  10. dog.desc();//直接调用父类的desc方法
  11.  
  12. }
  13. }
  14. //父类
  15. class Anmial{
  16. protected String name;
  17.  
  18. public Anmial(String name){
  19. System.out.println("animal");
  20. }
  21.  
  22. protected void desc(){
  23. System.out.println(name);
  24. }
  25. }
  26. //子类
  27. class Dog extends Anmial{
  28. /*public Dog(){
  29.  
  30. System.out.println("无参");
  31. }*/
  32. public Dog(String name){
  33. //显示的调用父类构造方法
  34. super(name);
  35. this.name =name;
  36. System.out.println("dog");
  37. }
  38. public void print(){
  39. System.out.println("我的名字:"+name);
  40. }
  41. }

二、继承的限制

1.java中只能实现单继承,也就是一个类只能有一个父类

2.允许多层继承,即一个子类可以有一个父类,一个父类还可以有其它的父类

3.继承只能继承非私有的属性和方法

4.构造方法不能被继承

子类的实例化过程:子类实例化时会先调用父类的构造方法

如果父类中没有默认的构造方法,在子类的构造方法中必须显示的调用父类的构造方法(super())

三、方法重写(发生在子类和父类之间,子类不想完全继承分类的方法)的特征

1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)

2.子类抛出的异常不能超过父类相应方法的异常(子类异常不能大于父类异常)

3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

下面举个实例:

实现一个化妆品商城中的化妆品管理

1.定义一个化妆品类(Cosmetic)

2.定义一个化妆品管理类(CosmeticManager)
   (1)实现进货功能
  (2)可以输出所有化妆品信息功能
3.使用继承实现一个可按单价排序输出所有化妆品的功能
4.使用继承实现一个只输出进口化妆品的功能

  1. import java.util.Arrays;
  2.  
  3. public class Practice14 {
  4.  
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. Cosmetic.print1();
  8. /*CosmeticManager a1=new CosmeticManager();
  9. a1.add(new Cosmetic("韩束",54.88f,"进口"));
  10. a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
  11. a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
  12. a1.add(new Cosmetic("大宝",10.0f,"国产"));
  13. a1.list();*/
  14.  
  15. /*SortCosmeticManager a1=new SortCosmeticManager();
  16. a1.add(new Cosmetic("韩束",54.88f,"进口"));
  17. a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
  18. a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
  19. a1.add(new Cosmetic("大宝",10.0f,"国产"));
  20. a1.list();*/
  21.  
  22. ImportCosmeticManager a1=new ImportCosmeticManager();
  23. a1.add(new Cosmetic("韩束",54.88f,"进口"));
  24. a1.add(new Cosmetic("百雀羚",84.60f,"国产"));
  25. a1.add(new Cosmetic("香奈儿",500.0f,"进口"));
  26. a1.add(new Cosmetic("大宝",10.0f,"国产"));
  27. a1.list();
  28.  
  29. }
  30. }
  31. //实现只输出进口化妆品的类
  32. class ImportCosmeticManager extends CosmeticManager{
  33. public void list(){
  34. for(int i=0;i<super.count;i++){
  35. if("进口".equals(super.cosmetic[i].getType())){ //String类中的方法
  36. super.cosmetic[i].print();
  37. }
  38. }
  39. }
  40. }
  41.  
  42. //可按单价排序输出所有化妆品的类
  43. class SortCosmeticManager extends CosmeticManager{
  44. public void list(){
  45. Cosmetic[] cs=new Cosmetic[super.count];
  46. for(int i=0;i<cs.length;i++){
  47. cs[i]=cosmetic[i];
  48. }
  49. Cosmetic temp=null;
  50. for(int i=0;i<cs.length-1;i++){
  51. for(int j=0;j<cs.length-1-i;j++){
  52. if(cs[j].getPrice()>cs[j+1].getPrice()){
  53. temp=cs[j];
  54. cs[j]=cs[j+1];
  55. cs[j+1]=temp;
  56. }
  57. }
  58. }
  59. for(int i=0;i<cs.length;i++){
  60. cs[i].print();
  61. }
  62. }
  63.  
  64. }
  65. //化妆品管理类
  66. class CosmeticManager{
  67. protected Cosmetic[] cosmetic=new Cosmetic[3];
  68. protected int count=0;
  69. public void add(Cosmetic c){
  70. if(count>=cosmetic.length){
  71. int newLen=cosmetic.length*3/2+1;
  72. cosmetic=Arrays.copyOf(cosmetic, newLen);
  73. }
  74. cosmetic[count]=c;//顺序不能调换
  75. count++;
  76. }
  77. public void list(){
  78. for(int i=0;i<count;i++){
  79. cosmetic[i].print();
  80. }
  81.  
  82. }
  83.  
  84. }
  85.  
  86. //化妆品类
  87. class Cosmetic{
  88. private String name;
  89. private float price;
  90. private String type;
  91. public Cosmetic(){
  92.  
  93. }
  94. public Cosmetic(String name,float price,String type){
  95. this.name=name;
  96. this.price=price;
  97. this.type=type;
  98. }
  99. public String getType() {
  100. return type;
  101. }
  102. public void setType(String type) {
  103. this.type = type;
  104. }
  105. public String getName() {
  106. return name;
  107. }
  108. public void setName(String name) {
  109. this.name = name;
  110. }
  111. public float getPrice() {
  112. return price;
  113. }
  114. public void setPrice(float price) {
  115. this.price = price;
  116. }
  117. public void print(){
  118. System.out.println(name+"\t"+price+"\t"+type);
  119. }
  120. public static void print1(){
  121. System.out.println("品牌\t价格\t类型");
  122. }
  123. }

 

Java面向对象_继承——基本概念以及管理化妆品实例分析的更多相关文章

  1. Java 面向对象_继承

    继承 在继承的关系中,子类就是一个父类,也就是说,子类可以被当做父类看待,例如:父类是员工,子类是程序员,那么程序员就是一个员工,代码示例: // 员工类 public class Employee{ ...

  2. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:宠物商店实例分析

    interface Pet{ // 定义宠物接口 public String getName() ; public String getColor() ; public int getAge() ; ...

  3. Java面向对象之继承(一)

    目录 Java面向对象之继承 引言 继承的特点 语法格式 父子类的关系 继承要点 重写父类方法 继承中的构造器 继承中的super关键字 ... Java面向对象之继承 继承是面向对象的第二大特征,是 ...

  4. objective-C 的内存管理之-实例分析

    objective-C 的内存管理之-实例分析 注:这是<Objective-C基础教程>一书上的实例,但是原书限于篇幅,分析得比较简单,初次阅读看得比较费劲,这里展开详细讨论一下. 场景 ...

  5. 【Java基础】【08面向对象_继承&方法&final】

    08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...

  6. Java 面向对象之继承和重写OverWrite,重写和重载的区别,抽象类

    01继承的概述 A:继承的概念 a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 b:在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作 ...

  7. Java面向对象-面向对象编程之基本概念

    面向对象这个概念,每本书上的说法定义很多. 我自己根据我的经验,自己归档总结了下, 所谓面向对象,就是 以基于对象的思维去分析和解决问题,万物皆对象: 面向对象经常和面向过程放一起讨论: 这里举例, ...

  8. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

  9. Java面向对象的继承

    继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...

随机推荐

  1. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  2. .net wcf调用java的需要认证的接口

    1.wcf直接添加java的webservice地址,这都是常规操作,没必要好说 2.修改config配置文件,添加headers消息头节点,这个需要注意 3.OK直接调用里面的方法即可,全部搞定 & ...

  3. WPF Visibility属性用法

    WPF Visibility属性用法 Visible 元素在窗体中正常显示 Collaspsed 元素不显示,也不占用空间 Hidden 元素不显示,但是任然为它保留空间

  4. C笔试题(二)

    /* 现在有一个数组 我们可以定义数组的子数组 如 数组 1 3 4 2 5 8 7 它的子数组可以是 1 3 4 3 4 2 5 等等 请写一个算法 找一个子数组 这个子数组递增不减少 并且是满足递 ...

  5. Spring 3.x 企业引用开发实战(陈雄华/林开雄)

    目录 ... 第一章:Spring概述 IoC:BeanFactory.Context.El(SpringEL表达式) AOP:允许JVM虚拟机启动时使用代理类在运行时期修改指定类的字节码,改变一个类 ...

  6. nodejs assert 模块

    assert模块是Node的内置模块,主要用于断定.如果表达式不符合预期,就抛出一个错误.该模块提供11个方法,但只有少数几个是常用的. 1.assert() assert(value[, messa ...

  7. 阶段3-团队合作\项目-网络安全传输系统\sprint1-传输子系统设计\第3课-加密传输优化

    对之前的传输系统进行加密,使之成为加密的网络传输系统 客户端编程模型 通过以上模型对传统的TCP传输模型进行优化 首先完成初始化工作,它是要在创建socket之前完成 主要是以上四个函数的实现,那么这 ...

  8. jquery提供的数据提交方式2-ajax

    以前介绍过ajax提交方式.但仅仅是个例子,今天将详细介绍jquery中的$.ajax,$.get,$.post方法. 一,首先介绍$.ajax方法参数(以下参数来自:http://www.cnblo ...

  9. c# 一维数组的声明方式

    1.直接指定数组元素 int [] arr = {2,4,1,8,4}; 2.只指定数组长度不指定元素值 指定一个长度为5的int型数组 int []  arr = new int[5]; 3.不指定 ...

  10. CSS类名命名规则

    CSS样式命名 说明 网页公共命名 #wrapper 页面外围控制整体布局宽度 #container或#content 容器,用于最外层 #layout 布局 #head, #header 页头部分 ...