3.1.1 自定义包

如果在程序中没有声明包,类将被存放在default的包中,该方式不被提倡。

语法:

package  包名

包命名规范:

包的命名规范应当体现出项目资源良好的划分

自定义标签类所在包命名规范:公司名称.开发组名称.项目名称

例如:com.java.explorer

3.1.2 包的导入

语法:

import  包名.类名

示例:
·

import java.util.*; //导入java.util包中所有的类
import java.util.ArrayList; //导入java.util包中的ArrayList类

示例:在Hero类中使用Tree类,Hero类与Tree类不在同一个包中

package com.java.oriented.dota.scene;
public class Tree {public void clear(){     //具体业务逻辑}
}package com.java.oriented.dota.figure;
//由于Tree类与Hero类不在同一个包中,所以需要使用import关键字导入包
import com.java.oriented.dota.scene.Tree;
public class Hero {public void eatTree(Tree tree){//调用树对象的clear()方法,吃掉的树在地图中消失tree.clear();}
}

3.1.3 包的访问权限

一个包中具有缺省访问权限的成员只能在同一个包中被引用。

如果一个包中的成员的访问权限为 public,那么这些成员才能被其他包中的类所引用。

package com.java.oriented.dota.scene;
public class Tree {void clear(){  //去掉public    //具体业务逻辑}
}package com.java.oriented.dota.figure;
//由于Tree类与Hero类不在同一个包中,所以需要使用import关键字导入包
import com.java.oriented.dota.scene.Tree;
public class Hero {public void eatTree(Tree tree){//调用树对象的clear()方法,吃掉的树在地图中消失tree.clear();}
}

3.2 继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例  域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

3.2.1 继承概述

  1. 继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出子类,进而构造出更为复杂的子类。
  2. 子类既有新定义的行为特征,又继承了原有类的行为特征。
  3. 父类与子类存在着包含与被包含的关系,是一种is-a的关系。
  4. 在Java中继承可以在现有类的基础上进行功能的扩展,这样能够更加快速地开发出新类,使新类不仅可以复用当前类的特征和行为,而且还可以定义自己的特征和行为。

Java继承语法:

[修饰符] class 子类名  extends 父类名{//类定义部分
} 

父类也称作基类或超类

3.2.2 继承的实现

示例:定义父类武器,以及子类圣剑和长矛

public class Weapon { //父类  武器String name;//武器名int attackValue;//攻击值//构造方法public Weapon(String name, int attackValue) {System.out.println("--执行武器父类Weapon的构造方法--");this.name = name;this.attackValue = attackValue;}//攻击方法public void attack(){System.out.println("武器名:"+name+"\t"+"攻击值:"+attackValue);}
}
public class Sword extends Weapon{ //圣剑  子类public Sword(String name, int attackValue) {super(name, attackValue);}
}
public class Spear extends Weapon{ //圣剑  长矛//构造方法public Spear(String name,int attackValue) {super(name, attackValue);}
}
public class ExtendsTest { // 测试类public static void main(String[] args){Sword word = new Sword("圣剑",300);word.attack();Spear spear = new Spear("长矛",250);spear.attack();}
}

3.3 重载和重写

3.3.1 重载

方法重载的规则:

方法名称必须相同。

参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)。

方法的返回类型可以相同也可以不相同。

仅仅返回类型不同不足以成为方法重载。

示例:在Book类中定义3个互为重载的方法,它们分别计算不同情形下图书的价格。

public class Book {//定义3个重载方法public float  getPrice(){   return 100;}public  float getPrice(int page){return (float)(page*0.1);}public  float  getPrice(int page ,float discount){return (float) (page*discount);}public static void main(String[] args) {Book book=new Book();//创建Book对象System.out.println("default图书价格:"+book.getPrice());System.out.println("根据页数计算图书价格:"+book.getPrice(268)); System.out.println("根据页数和折扣计算图书格:"+book.getPrice(360,0.2f));}
}

3.3.2 重写
在子类中可以根据需要对从父类中继承来的方法进行重写。

重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。重写方法不能使用比被重写的方法更严格的访问权限。

重写方法不能声明抛出比被重写方法范围更大的异常类型。

重写是外壳不变,核心变。也就是说方法名不变,参数不变,具体实现可以改变。一般是在父类中声明方法,在子类中重写。重载是方法名不变,但参数一定要变。而且重载的方法一般都写在一个类中。

示例:在子类鸵鸟中重写父类飞鸟的飞翔方法

public class Bird { // 父类  飞鸟//Bird类的fly()方法public void fly(){System.out.println("我在蓝天白云间自由的飞翔...");}
}
public class Ostrich extends Bird{// 子类  鸵鸟public  void fly(){ //重写父类方法System.out.println("我只能在陆地上拍拍翅膀奔跑...");}public  void prey(){ //捕食方法fly();System.out.println("执行捕食方法");}public static void main(String[] args) {Ostrich ostrich=new Ostrich();ostrich.prey(); //调用ostrich对象的prey()}
}

3.3.3 重写覆盖问题

示例:子类鸵鸟捕食时将使用父类飞鸟的飞翔功能。

public class Ostrich extends Bird{public  void fly(){System.out.println("我只能在陆地上拍拍翅膀奔跑...");}//捕食方法public  void prey(){//在prey()方法中使用super关键调用父类的fly()方法super.fly();System.out.println("执行捕食方法");}public static void main(String[] args) {//创建Ostrich对象Ostrich ostrich=new Ostrich();ostrich.prey();//调用ostrich对象的fly()}
}

3.4 多态

3.4.1 多态应用

示例:指向子类的父类引用在执行重写方法时所体现的多态性

//父类 人物
public class Figure {protected String name;public void attack(){//此处不进行具体的攻击操作,不同职业的英雄攻击方式不同}public  void run(){     System.out.println("在奔跑");}
}//子类 战士
public class Warrior  extends  Figure{//重写父类的attack()方法public void attack(){System.out.println(this.name+"正在物理攻击......");}
}
//子类 法师
public class Master extends Figure {//重写父类的attack()方法public void attack(){      System.out.println(this.name+"正在魔法攻击......");}   public static void main(String[] args) {Figure master=new Master();master.name="恶魔巫师";Figure warrior=new Warrior();warrior.name="撼地神牛";master.attack();warrior.attack();}
}

总结:
1.声明包的语句是“package  包名”,该语句必须放在第一行,导入类的语句是  “import 包名.类名”。
2.继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例  域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
3.子类继承父类的语法是:“[修饰符] class  子类名   extends  父类名”。
4.重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
5.重写就是在子类方法重写父类方法,重写的方法和被重写的方法必须具有相同方法名称、参数 
列表和返回类型。
6.多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
7.在编译时,可以通过父类的引用指向子类对象,而在运行时,则通过父类所指向的子类对象,调用子类中重写父类的方法。

Java面向对象笔记 • 【第3章 继承与多态】相关推荐

  1. 【JAVA SE】第七章 继承和多态

    第七章 继承和多态 文章目录 第七章 继承和多态 一.继承 1.概念 2.继承的特性 2.继承关键字 3.构造器 4.子类重写父类方法的规则 二.多态 1.概念 2.多态的优点 3.多态存在的三个必要 ...

  2. Java面向对象——基础2 封装、继承、多态

    目录 Java基础知识图解 一.方法的重载 1.1重载是什么? 1.2重载的例子 1.3判断重载练习 1.4重载小结 1.5可变个数的形参 ​说明: 二.方法参数的值传递机制 2.1基本数据类型的参数 ...

  3. Java面向对象三大特性(封装、继承、多态)

    文章目录 前言 一.封装 1. 封装的概念 2. private实现封装 3. getter和setter方法 4.封装的好处 二.继承 1. 继承的概念 2. extends实现继承 3. supe ...

  4. java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super

    目录点击跳转 包 包的命名方法 导入包中的类 系统包的介绍 **注意事项** 继承 基础知识 构造方法 **基础语法** `protected`修饰符 组合 `this`和`super`关键字 `th ...

  5. 《Java 核心技术 卷1》 笔记 第五章 继承(3)

    5.1.6 抽象类 有时候我们无法说出具体是什么,只能用于标识一个类型,比如图形,就可作为抽象类.虽然无法具体描述图形,但是图形通常都有面积.周长.这种时候就可用抽象类标识. 抽象类使用abstrac ...

  6. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  7. Java语言程序设计(基础篇) 第十一章 继承和多态

    第十一章 继承和多态 11.1 引言 面向对象的编程允许你从已经存在的类中定义新的类,这称为继承. 11.2 父类和子类 1.继承使得你可以定义一个通用的类(既父类),之后扩充该类为一个更加特定的类( ...

  8. java 继承与多态 习题_JAVA基础 第4章继承与多态_练习题_200910

    Java基础第4章练习题大外软件学院 第4章继承与多态 一.选择题 1. 编译和运行以下两文件结果是( D ). //文件P1.java package MyPackage; class P1{ vo ...

  9. JAVA面向对象程序设计-FeiGe快递系统-继承II

    JAVA面向对象程序设计-FeiGe快递系统-继承 package com.caishui.model;public class TestSon {public static void main(St ...

  10. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

最新文章

  1. 写代码:使用while循环实现输出1,2,3,4,5,7,8,9,11,12
  2. Windows安装Python3
  3. faster-rcnn移植过程中出现错误
  4. 用GCD来处理大量for loop任务
  5. 访问tomcat manager应用遇到的403 access denied错误
  6. Linux工作笔记-根据PID查询进程是否存在(进程管理相关程序中常用)
  7. 数学rect什么意思_数学怎么审题?孩子必须知道的几个点!
  8. oracle biee 11g客户端连接OCI 10g/11g数据源时报错
  9. PHP总结:几个陷阱
  10. 我的2018春招实习+秋招总结【前端开发】
  11. 第48次《中国互联网络发展状况统计报告》发布--报告解读
  12. 去除马赛克,有办法了 附运行教程
  13. 泛微OA系统排名?泛微OA办公系统怎么选?什么是用户口碑最好的泛微OA系统?
  14. 程序猿段子_程序员段子
  15. AIML标签中srai不起作用的原因
  16. 【Java集合】集合是什么?为什么要用集合?
  17. Winsock网络编程头文件及库文件的设置
  18. .NET CoreRT AOT原生程序编译使用的一些小建议
  19. 浙江大学计算机学霸作息,浙大学霸学子作息表:精确到分钟!最怕优秀的人比我们还努力!...
  20. TCP的TIME WAIT快速回收与重用

热门文章

  1. Hetero-Center Loss for Cross-Modality Person Re-Identification阅读笔记
  2. html中如何加视频背景音乐,怎么用html设置背景音乐
  3. 有关Best-effort理解的相关资料汇总
  4. android 蜂巢平台,Android 3.2来临 蜂巢系统平板详解析
  5. ASP.NET支持多语言
  6. SQL Server 2008系统的系统数据库
  7. php重构求圆柱圆锥的体积,将一个体积是120立方厘米的圆柱形木料削成一个最大的圆锥,削去的比剩下的多______立方厘米....
  8. 2021-06-29 MySql(未完待续)
  9. windows优化大师怎么用_手机内存不够?最好用的存储空间清理工具分享给你
  10. Arduino提高篇20—S50卡数据读写