java学习(五)java类继承
1.制作一个工具类的文档
javadoc -d 目录 -author -version arrayTool.java
实例:
- class arrayDemo
- {
- public static void main(String[] args){
- int[] arr = {23,34,54,65,57,7};
- //遍历数组
- arrayTool.printArray(arr);
- //获取数组中的最大值
- int max = arrayTool.getMax(arr);
- System.out.println("数组中的最大值为"+max);
- //获取数组中元素的索引
- int index = arrayTool.getIndex(arr,57);
- System.out.println("57在数组中的索引位置为"+index);
- }
- }
- 生成工具类的文档类型
javac -d doc -author -version arrayTool.java
/**- *数组操作工具类
- *@author greymouster
- *@version v1.0
- */
- public class arrayTool
- {
- /**
- *私有的构造方法 禁止外部实例化对象
- */
- private arrayTool(){}
- /**
- *遍历数组方法 遍历后为[元素1,元素2,元素3,....]
- *@param arr 要遍历的数组
- */
- public static void printArray(int[] arr){
- System.out.print("[");
- for(int x=0;x<arr.length;x++){
- if(x == arr.length-1){
- System.out.println(arr[x]+"]");
- }else{
- System.out.print(arr[x]+",");
- }
- }
- }
- /**
- *获取数组中最大值的方法
- *@param arr 数组
- *@return 返回数组中的最大值
- */
- public static int getMax(int[] arr){
- //加入数组的元素为最大值
- int max = arr[0];
- for(int x=1;x<arr.length;x++){
- if(max<arr[x]){
- max = arr[x];
- }
- }
- return max;
- }
- /**
- *获取数组中值的索引
- *@param arr 数组 value 数组中的值
- *@return index 返回数组中值所在的索引 如果不存在返回-1.
- */
- public static int getIndex(int[] arr,int value){
- int index = -1;
- for(int x=0;x<arr.length;x++){
- if(arr[x] == value){
- index = x;
- }
- }
- return index;
- }
- }
2.java中不支持多继承,支持多层继承
- class A extends B,C{} //错误
- //以下是多层继承关系
- class A {
- public static void method(){
- System.out.println("ceshi");
- }
- }
- class B extends A{
- public static void show(){
- System.out.print("ceshi1");
- }
- }
- class C extends B{
- public static void main(Stirng[] args){
- B b = new B();
- b.show();
- b.method();
- }
- }
子类不能继承父类的构造方法,但是可以通过supper关键字去访问父类构造方法
子类中所有的构造方法默认都会访问父类中无参数的构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据
所以,子类初始化之前,一定要先完成父类数据的初始化
注意:每个构造方法的第一条语句默认都是:super()
super 和this的区别:
- /*
- 问题是:
- 我不仅仅要输出局部范围的num,还要输出本类成员范围的num。怎么办呢?
- 我还想要输出父类成员范围的num。怎么办呢?
- 如果有一个东西和this相似,但是可以直接访问父类的数据就好了。
- 恭喜你,这个关键字是存在的:super。
- this和super的区别?
- 分别是什么呢?
- this代表本类对应的引用。
- super代表父类存储空间的标识(可以理解为父类引用,可以操作父类的成员)
- 怎么用呢?
- A:调用成员变量
- this.成员变量 调用本类的成员变量
- super.成员变量 调用父类的成员变量
- B:调用构造方法
- this(...) 调用本类的构造方法
- super(...) 调用父类的构造方法
- C:调用成员方法
- this.成员方法 调用本类的成员方法
- super.成员方法 调用父类的成员方法
- */
- class Father {
- public int num = 10;
- }
- class Son extends Father {
- public int num = 20;
- public void show() {
- int num = 30;
- System.out.println(num); // 30
- System.out.println(this.num); //20
- System.out.println(super.num); //10
- }
- }
- class ExtendsDemo5 {
- public static void main(String[] args) {
- Son s = new Son();
- s.show();
- }
- }
通过super()方法去访问父类中的带参构造方法
- class Father{
- public Father(String name){
- System.out.println("带参构造方法");
- }
- }
- class Son extends Father{
- public Son(){
- super("随便给");
- System.out.println("无参构造方法");
- }
- public Son(String name){
- //super("随便给");
- this();
- System.out.println("有参构造方法");
- }
- }
- class ExtendsDemo{
- public static void main(String[] args){
- Son s = new Son();
- System.out.println("--------------");
- Son s2 = new Son("daican");
- }
- }
方法重写和方法重载
方法重写:子类中出现了和父类中方法声明一模一样的方法
方法重载:本类中出现了方法名一样,参数列表不同的方法,与返回值无关
- /*
- 猫狗案例讲解
- 先找到具体的事物,然后发现具体的事物有共性,才提取出一个父类。
- 猫:
- 成员变量:姓名,年龄,颜色
- 构造方法:无参,带参
- 成员方法:
- getXxx()/setXxx()
- eat()
- palyGame()
- 狗:
- 成员变量:姓名,年龄,颜色
- 构造方法:无参,带参
- 成员方法:
- getXxx()/setXxx()
- eat()
- lookDoor()
- 共性:
- 成员变量:姓名,年龄,颜色
- 构造方法:无参,带参
- 成员方法:
- getXxx()/setXxx()
- eat()
- 把共性定义到一个类中,这个类的名字叫:动物。
- 动物类:
- 成员变量:姓名,年龄,颜色
- 构造方法:无参,带参
- 成员方法:
- getXxx()/setXxx()
- eat()
- 猫:
- 构造方法:无参,带参
- 成员方法:palyGame()
- 狗:
- 构造方法:无参,带参
- 成员方法:lookDoor()
- */
- //定义动物类
- class Animal {
- //姓名
- private String name;
- //年龄
- private int age;
- //颜色
- private String color;
- public Animal() {}
- public Animal(String name,int age,String color) {
- this.name = name;
- this.age = age;
- this.color = color;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getColor() {
- return color;
- }
- public void setColor(String color) {
- this.color = color;
- }
- public void eat() {
- System.out.println("不要睡了,该吃饭了");
- }
- }
- //定义猫类
- class Cat extends Animal {
- public Cat() {}
- public Cat(String name,int age,String color) {
- super(name,age,color);
- }
- public void playGame() {
- System.out.println("猫玩英雄联盟");
- }
- }
- //定义狗类
- class Dog extends Animal {
- public Dog() {}
- public Dog(String name,int age,String color) {
- super(name,age,color);
- }
- public void lookDoor() {
- System.out.println("狗看家");
- }
- }
- //测试类
- class ExtendsTest5 {
- public static void main(String[] args) {
- //测试猫
- //方式1
- Cat c1 = new Cat();
- c1.setName("Tom");
- c1.setAge(3);
- c1.setColor("白色");
- System.out.println("猫的名字是:"+c1.getName()+";年龄是:"+c1.getAge()+";颜色是:"+c1.getColor());
- c1.eat();
- c1.playGame();
- System.out.println("---------------");
- //方式2
- Cat c2 = new Cat("杰瑞",5,"土豪金");
- System.out.println("猫的名字是:"+c2.getName()+";年龄是:"+c2.getAge()+";颜色是:"+c2.getColor());
- c2.eat();
- c2.playGame();
- }
- }
java学习(五)java类继承的更多相关文章
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- “全栈2019”Java第五十章:继承与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java学习一目了然——File类文件处理
java学习一目了然--File类文件处理 File类(java.io.File) 构造函数: File(String path) File(String parent,String child) F ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- Java学习:Properties类
Java学习:Properties类 学习目标 认识properties文件,理解其含义,会正确创建properties文件. 会使用java.util.Properties类来操作propertie ...
- Java学习:File类
Java学习:File类 File类的概述 重点:记住这三个单词 绝对路径和相对路径 File类的构造方法 File类判断功能的方法 File类创建删除功能的方法 File类获取(文件夹)目录和文件夹 ...
- Java的对象与类,继承
Java的对象与类,继承 题目1.Java类的建立与使用 设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名.当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的 ...
- [ Java学习基础 ] Java构造函数
构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
随机推荐
- sublime中开启表格插入
1. 导入包 tableedit 2. ctrl+shift +p 输入teecv,然后开启后面连个东西: 3 按tab可以插入表格
- sql server 2005 修改动态端口,连接字符串为:需要改成:IP地址+逗号+端口号才行
1.sql server 2005 安装完毕后,默认是动态段,需要用sql brower 查询端口号:修改给固定端口后,格式为:IP地址+逗号+端口号. 2.sql 2000 的格式为:格式为:IP地 ...
- httpd 系统错误 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll
说来话长的搭了一个discuz论坛,服务器是apache,我本地的是直接从官网下的(值得吐槽的是官网居然拿不提供编译版本么要从第三方网站获取,不知道为何....),对应apache之前是搭bug管理系 ...
- jq循环方法
jq在前台使用很广泛,其中不可避免会用到循环,for循环可以,但有时不方便,下边举两个jq循环: 第一个: $.each(数组或对象,function(index,item){ //循环的逻辑代码 } ...
- JNI 里使用STL
JNI里的c或者c++ 调用stl 的时候,比如引入map头文件: #include <map> 在cygwin使用NDK编译的时候,会提示: fatal error:map: No su ...
- [iOS]swift版内购
//内购Demo,看代码说话吧 class IAPTestViewController: UIViewController ,SKProductsRequestDelegate, SKPaymentT ...
- Half Lambert
[Half Lambert] Half Lambert was a technique created by Valve as a way of getting the lighting to sho ...
- Kafka核心概念(转)
转自:https://blog.csdn.net/liyiming2017/article/details/82805479 1.Kafka集群结构 实际上kafka的结构图是有些区别的,现在我们看下 ...
- redis入门资源收集汇总
redis安装:http://www.redis.io/download redis命令测试平台:http://try.redis.io/ redis桌面管理工具:http://redisdeskto ...
- 依赖VUE组件通讯机制实现场景游戏切换