文章目录

  • JAVA基础七 类和对象
    • 01 引用
    • 02 继承
    • 03 方法重载
    • 04 构造方法
    • 05 this
    • 06 传参
    • 07 包
    • 08 访问修饰符
    • 09 类属性
    • 10 类方法
    • 11 属性初始化
    • 12 单例模式
    • 13 枚举类型

JAVA基础七 类和对象

01 引用

  • 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。
Hero h=new Hero();

02 继承

  • 继承 extends
package 作业.类与对象.JAVA基础;
/**
* @Title
* @description 设计一个类Armor护甲,继承Item类,并且额外提供一个属性ac: 护甲等级 int类型
* @author 胡敏干
* @version 创建时间:2019年11月7日 下午3:30:33
* @version 1.0
*/
public class Extends_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubArmor cloth_1 =new Armor();Armor cloth_2 =new Armor();cloth_1.name="布甲";cloth_1.price=300;cloth_1.ac=15;cloth_2.name="锁子布甲";cloth_2.price=500;cloth_2.ac=40;}
}
class Item{String name;int price;
}
class Armor extends Item{int ac;
}

03 方法重载

  • 方法的重载指的是方法名一样,但是参数类型不一样。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 设计一个类Support (辅助英雄)继承Hero,提供一个heal(治疗)方法
*@Time 2019年11月7日下午8:20:27
*@Version1.0
*/
public class Overload_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubSupport h1=new Support();h1.name="蔡文姬";Hero h2=new Hero();h2.name="鲁班";Hero h3=new Hero();h3.name="赵云";Hero h4=new Hero();h4.name="曹操";h1.heal();h1.heal(h2);h1.heal(h2,1.24f); h1.heal(h1,h2,h3,h4);}
}
class Hero{String name;float hp;float armor;int moveSpeed;
}class Support extends Hero{public void heal() {System.out.println("回复血量");}public void heal(Hero h) {System.out.println(name+"对"+h.name+"回复血量!");}public void heal(Hero h,float hp) {System.out.println(name+"对"+h.name+"回复血量"+hp);}public void heal(Hero...heros) {//相当于定义数组,无视参数的数量for(int i=0;i<heros.length;i++)System.out.println(name+"对"+heros[i].name+"回复血量");}}

04 构造方法

  • 1、构造方法的实现:方法名和类名一样(大小也一样),无返回;实例化一个对象的时候,必然调用构造方法。
  • 2、没有自定义时,有默认构造方法。
  • 3、一旦自定义,默认的消失;
  • 4、构造方法也可以重载。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description
*@Time 2019年11月7日下午8:37:27
*@Version1.0
*/
public class ConstructionMethod_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubHero_1 h1=new Hero_1("鲁班",100.00f,20.00f,20);System.out.println(h1.name);}
}
class Hero_1{String name;float hp;float armor;int moveSpeed;public Hero_1(String heroName,float heroHP,float heroArmor,int heroMoveSpeed) {name=heroName;hp=heroHP;armor=heroArmor;moveSpeed=heroMoveSpeed;System.out.println("名字:"+name+" 血量:"+hp+" 护甲值:"+armor+" 移动速度:"+moveSpeed);}
}

05 this

  • 1、this代表当前对象;
  • 2、this访问属性;
  • 3、this()可以在一个构造方法访问另一个构造方法。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 参考练习-构造方法 设计一个构造方法,但是参数名称不太一样,分别是
*@Time 2019年11月7日下午9:50:10
*@Version1.0
*/
public class KeyThis {public static void main(String[] args) {// TODO Auto-generated method stubHero_2 h1 =new Hero_2("鲁班",100.00f,20.00f,20);System.out.println(h1.name);}}
class Hero_2{String name;float hp;float armor;int moveSpeed;public Hero_2(String name,float hp,float armor,int moveSpeed) {this.name=name;this.hp=hp;this.armor=armor;this.moveSpeed=moveSpeed;//name=name;//hp=hp;//armor=armor;//moveSpeed=moveSpeed;System.out.println("名字:"+name+" 血量:"+hp+" 护甲值:"+armor+" 移动速度:"+moveSpeed);}
}

06 传参

  • 传递参数
  1. 基本类型传参;
  2. 类类型传参;
  3. 引用和=的区别。
package 作业.类与对象.JAVA基础;
/** * @Title
* @description 在方法中,使参数引用指向一个新的对象;外面的引用是指向原来的对象?还是新的对象?
* @author 胡敏干
* @version 创建时间:2019年11月8日 上午10:53:40
* @version 1.0
*/
public class PassingParameters_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubHero_4 teemo =  new Hero_4("提莫",383);//受到400伤害,挂了teemo.hp = teemo.hp - 400;teemo.revive(teemo);System.out.println(teemo.hp);// 输出多少? 怎么理解?}}
class Hero_4 {   String name; //姓名float hp; //血量        float armor; //护甲        int moveSpeed; //移动速度public Hero_4(){} public Hero_4(String name,float hp){this.name = name;this.hp = hp;}//复活public void revive(Hero_4 h){h = new Hero_4("提莫",383);   //new了一个新的对象,新对象在方法体中执行结束后自动消失//改成h.hp=383;  //在原来的死亡的teemo进行更改。}}

07 包

package

  • 1、把相近的类放在同一个包内,如ADHero和APHero放在charactor中;因为同一个包方便直接使用;
  • 2、要调用其他包的类,需要import 包名.类名,如import charactor.ADHero。
package 作业.类与对象.JAVA基础;
/** * @Title
* @description 创建一个新的包charactor1,并且让练习-治疗类:Support 声明在这个包下
* @author 胡敏干
* @version 创建时间:2019年11月8日 下午2:07:35
* @version 1.0
*/
public class Package_Lesson {public static void main(String[] args) {// TODO Auto-generated method stub}}//package charactor1;
//类所在的包名
//import charactor.Hero;
//引用其他包的类
/*
class Support extends Hero {public void heal() {System.out.println("对自己进行治疗");}public void heal(Hero hero) {System.out.println("给英雄 " + hero + " 加血");}public void heal(Hero hero, int hp) {System.out.println("给英雄 " + hero + " 加了 " + hp + "点血");}
}
*/

08 访问修饰符

  • 1、类与类之间的关系
    自身类、同包子类 同包非子类、不同包子类、不同包非子类 ;
  • 2、四种类型 private package protected public
修饰符 权限 权限 权限 权限
private 同包子类
package 同包子类 同包非子类
protected 同包子类 同包非子类 不同包子类
public 同包子类 同包非子类 不同包子类 不同包非子类
  • 3、那么什么情况该用什么修饰符呢?
    从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?
  1. 属性通常使用private封装起来;
  2. 方法一般使用public用于被调用;
  3. 会被子类继承的方法,通常使用protected;
  4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西;
  5. 再就是作用范围最小原则:简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了。
package 作业.类与对象.JAVA基础;
/** * @Title
* @description 四种修饰符 private package protected public
* @author 胡敏干
* @version 创建时间:2019年11月8日 下午2:22:50
* @version 1.0
*/
public class Modifier_Lesson {public static void main(String[] args) {// TODO Auto-generated method stub}}
//类之间的关系
/*
自身类同包子类     同包非子类   不同包子类   不同包非子类
*///四种类型 private package protected public
/*
private     同包子类
package     同包子类    同包非子类
protected   同包子类    同包非子类   不同包子类
public      同包子类    同包非子类   不同包子类   不同包非子类*/

09 类属性

  • 1、当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性,当一个属性被声明成类属性,那么所有的对象,都共享一个值;
  • 2、访问类属性。对象.类属性 或者 类.类属性,一般用后面的方法;
  • 3、对象属性和类属性的区别。不同英雄不同的名称,用对象属性;不同的英雄属于一家公司,用类属性。
package 作业.类与对象.JAVA基础;
/** * @Title
* @description //通过garen.copyright修改其值。garen.copyright = "Blizzard Entertainment Enterprise";然后打印teemo.copyright,观察是否有变化。
* @author 胡敏干
* @version 创建时间:2019年11月8日 下午3:44:35
* @version 1.0
*/
public class StaticProperty {public static void main(String[] args) {// TODO Auto-generated method stubHero_5 garen =  new Hero_5();garen.name = "盖伦";Hero_5.copyright = "版权由Riot Games公司所有";System.out.println(garen.name);System.out.println(garen.copyright);Hero_5 teemo =  new Hero_5();teemo.name = "提莫";System.out.println(teemo.name);    System.out.println(teemo.copyright);garen.copyright="Blizzard Entertainment Enterprise";//修改盖伦的版权System.out.println(garen.copyright);//输出什么?garen的版权变了吗?System.out.println(teemo.copyright);//输出什么?teemo的版权变了吗?}}
class Hero_5 {public String name; //实例属性,对象属性,非静态属性protected float hp;static String copyright;//类属性,静态属性,类属性跟着类走,可以由任意对象修改并更新。
}

10 类方法

  • 1、类方法(Static方法)和对象方法(实例方法、非静态方法);
  • 2、类方法的调用可以不要对象。
  • 3、类方法调用的方式有:(1)garen.winBattle();(不建议用);(2)Hero.winBattle();(建议用)
  • 4、类方法更多地体现功能性,与实例(属性)无关,如:打印“游戏时长”和玩具体某个英雄无关。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 在一个类方法中,直接调用一个对象方法,比如在battleWin中调用die(),能否直接调用? 为什么?
*@Time 2019年11月8日下午7:44:47
*@Version1.0
*/
public class StaticMethod_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubHero_6 garen =  new Hero_6();garen.name = "盖伦";//必须有一个对象才能调用garen.die();Hero_6 teemo =  new Hero_6();teemo.name = "提莫";//无需对象,直接通过类调用Hero_6.battleWin();}}
class Hero_6 {public String name;protected float hp;//实例方法,对象方法,非静态方法//必须有对象才能够调用public void die(){hp = 0;}//类方法,静态方法//通过类就可以直接调用public static void battleWin(){System.out.println("battle win");//不能调用非静态的方法die()}
}

11 属性初始化

  • 1、对象属性初始化三种方式:
    (1)声明属性的时候初始化;(2)初始化块;(3)调用构造方法。
  • 2、类属性的初始化两种方式:
    (1)声明时初始化;(2)初始化块(对比对象属性的多加一个static)。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 对象属性的初始化有三种方式,故意把初始化块,放在构造方法下面,问题:这三种方式,谁先执行?谁后执行?
*@Time 2019年11月8日下午8:01:32
*@Version1.0
*/
public class PropertyInitialization_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubnew Hero_7();}}class Hero_7 {public String name =Hero_7.getName("some hero属性声明"); //---1public Hero_7(){name = Hero_7.getName("one hero构造方法");//---3}{name =Hero_7.getName("the hero初始化块");//---2}public static String getName(String pos) {String result ="name"+pos;System.out.println(result);return result;}
}

12 单例模式

  • 1、单例模式的定义:
    单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。
  • 2、单例模式的三要素:
    (1)私有化构造方法;(2)静态属性指向实例;(3)public static的getInstance方法,返回第二步的静态属性。
  • 3、饿汉模式和懒汉模式。前者在启动时就初始化,立即加载的方式;后者在调用时初始化,延迟加载。
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 使用饿汉式单例模式, 把Hero类改造成为单例模式; 使用懒汉式单例模式,把Item类改造成为单例模式.
*@Time 2019年11月8日下午8:38:39
*@Version1.0
*/
public class SingletonMode_Lesson {public static void main(String[] args) {// TODO Auto-generated method stub       }
}
class Hero_8{//饿汉模式//私有化构造方法。private Hero_8() {}//静态属性指向对象public static Hero_8 instance=new Hero_8();//public static的getInstance方法返回第二步的静态属性public static Hero_8 getInstance() {return instance;}
}class Item{//懒汉模式private Item() {}public static Item instance;public static Item getInstance() {if(null==instance)instance=new Item();return instance;}
}

13 枚举类型

  • 1、enum是一种特别的类(还是类),替代关键字class的作用,使用枚举可以很方便的定义常量。
  • 2、enum类的写法。
  • 3、调用enum类的枚举特性。
  • 4、for增强语句的使用。for (Season s : Season.values()) { System.out.println(s); }
package 作业.类和对象.JAVA基础;
/*
*@Author 胡敏干
*@Description 设计一个枚举类型HeroType,使用上述分类作为常量,再编写一段switch语句,把每种枚举常量输出为中文字符串
*@Time 2019年11月8日下午9:56:47
*@Version1.0
*/
public class Enum_Lesson {public static void main(String[] args) {// TODO Auto-generated method stubfor(HeroType ht:HeroType.values()) {switch(ht){case TANK:System.out.println("坦克");break;case WIZARD:System.out.println("法师");break;case ASSASSIN:System.out.println("刺客");break;case ASSIST:System.out.println("辅助");break;case WARRIOR:System.out.println("近战");break;case RANGED:System.out.println("远程");break;case PUSH:System.out.println("推进");break;case FARMING:System.out.println("打野");break;}}}}
enum HeroType{TANK ,WIZARD ,ASSASSIN ,ASSIST ,WARRIOR ,RANGED ,PUSH ,FARMING
}

本文学习内容均来自linkhow2j.cn,用于个人笔记和总结,侵删。

JAVA基础七 类和对象相关推荐

  1. JAVA基础––从类和对象开始

    JAVA基础--从类和对象开始 一.概念 1.面向对象中类和对象的概念 对象:对象是具有状态和行为的实体,例如某个具体的学生,或者是王者荣耀里的英雄,可以是物理实体,也可以是逻辑实体. 类:类是一组具 ...

  2. java基础(类与对象、集合)

    java基础(类与对象.集合) 类与对象 类与对象中的栈和堆 构造方法 this关键字 面向对象三大特性 封装性(private) 继承性(extends) 方法重写(@override) 多态性 向 ...

  3. Java基础18-String类【String类的特点对象个数常用方法】【超详细讲解】

    Java基础-String类[超详细讲解] String类的特点 String在java.lang.String包中 1:特点 (1)String类型不能被继承,因为由final修饰 (2)Strin ...

  4. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

  5. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  6. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  7. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  8. Java基础 时间相关类小结[Timestamp,Date,Calendar]

    Java基础 时间相关类[Timestamp,Date,Calendar] 前言 一.Timestamp(时间戳) 二.Date(日期) 三.Calendar(日历) 四.Timestamp.Date ...

  9. Java基础教程-05-面向对象

    Java基础教程-05-面向对象 1. 面向过程和面向对象解释 1.1 面向过程 1.1.1 简述 我们回想一下, 前面我们完成一个需求的步骤是怎样的? 首先是搞清楚我们要做什么. 然后在分析怎么做. ...

最新文章

  1. jquery技巧总结
  2. K - Anton and Lines CodeForces - 593B
  3. 16、IN和NOT IN用法详解
  4. 关于js中namespace命名空间模式
  5. linux脚本下载,一个测试下载速度的shell脚本
  6. java mysbatis select_java相关:详解Mybatis中的select方法
  7. JVM 参数使用总结
  8. matlab画横的/水平的条形图
  9. 分治法与递归求科赫曲线
  10. android Launcher——数据加载与变更
  11. ElasticSearch for GIS应用
  12. win10做好备份如何恢复系统
  13. 办信用卡哪家强?update 2014.11.21
  14. exo文件_eXo平台概述
  15. igraph与netwrokx的转换
  16. C#中的异步和多线程
  17. ios 模拟器沙盒_查看iOS模拟器应用的沙箱文件
  18. Windows卸载与清除工具 “ Geek 与 CCleaner ”
  19. 万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来
  20. c语言红酒编程题,葡萄酒基础知识试题解析一

热门文章

  1. 利用c语言switch函数制作一个简单的计算器 2021年2月7日
  2. Opencv中的图像相加,相减,相除,相乘(python实现)
  3. 不允许一个用户使用一个以上用户名域一个服务器或共享
  4. mysql比对两张表数据
  5. mac安装nodeBB时的坑
  6. lol8月21号服务器维护,8月21日lol维护公告最新 8.21lol维护到几点
  7. 数据库安全性和完整性考虑_您是否考虑过云安全性?
  8. Oracle 12c RAC 安装文档
  9. 视觉欺骗 A和B的颜色相同吗?
  10. UE4 二维地图的缩放与拖拽操作