一.Static

static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量

静态变量是随着类的加载而加载的,优先于对象出现的

练习1.定义数组工具类

需求:在实际开发中,经常会遇到一些数组使用的工具类。

请按照如下要求编写一个数组的工具类:ArrayUtil

提供一个工具类方法printArr,用于返回整数数组的内容。

返回的字符串格式如:[10,20,50,34,100](只考虑整数数组,且只考虑一维数组)

提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组)

定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。

ArrayUtil.Java

package cn.nwafu.a01staticdemo2;public class ArrayUtil {//私有化构造方法//目的:为了不让外界创建他的对象private ArrayUtil(){}//需要定义为静态,方便调用public static String printArr(int[] arr){StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if(i == arr.length-1){sb.append(arr[i]);}else{sb.append(arr[i]+",");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr){double sum = 0;for (int i = 0; i < arr.length; i++) {sum = sum + arr[i];}return sum/arr.length;}
}

TestDemo.Java

package cn.nwafu.a01staticdemo2;public class TestDemo {public static void main(String[] args) {int[] arr1 = {1,2,3,4,5};String str = ArrayUtil.printArr(arr1);System.out.println(str);double[] arr2 ={1.1,2.2,1.4,4.8,65};double avg = ArrayUtil.getAverage(arr2);System.out.println(avg);}
}

练习2.定义学生工具类

需求:定义一个集合,用于存储3个学生对象。

学生类的属性为:name、age.gender

定义一个工具类,用于获取集合中最大学生的年龄。

Student.Java Javabean 类

package cn.nwafu.a03staticdemo3;public class Student {private String name;private int age;private String gender;public Student() {}public Student(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return gender*/public String getGender() {return gender;}/*** 设置* @param gender*/public void setGender(String gender) {this.gender = gender;}
}

StudentUtil.Java 工具类

package cn.nwafu.a03staticdemo3;import java.util.ArrayList;public class StudentUtil {private StudentUtil(){}public static int getMax(ArrayList<Student> list){int max = list.get(0).getAge();for (int i = 1; i < list.size(); i++) {int tempAge = list.get(i).getAge();if(tempAge > max){max = tempAge;}}return max;}
}

StudentTest.Java 测试类

package cn.nwafu.a03staticdemo3;import java.util.ArrayList;public class StudentTest {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();Student stu1 = new Student("张三",24,"男");Student stu2 = new Student("赵六",23,"女");Student stu3 = new Student("李琦",26,"男");list.add(stu1);list.add(stu2);list.add(stu3);int max = StudentUtil.getMax(list);System.out.println(max);}
}

static的注意事项

静态方法只能访问静态变量和静态方法

非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法

静态方法中是没有this关键字

二、继承

#什么是继承?

对象代表什么,就得封装对应的数据,并提供数据对应的行为

#继承的格式?

Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

#使用继承的好处?

可以把多个子类中重复的代码抽取到父类中了,提高代码的复用性。

子类可以在父类的基础上,增加其他的功能,使子类更强大。

#什么时候用继承?

当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

#继承的特点

Java只支持单继承,不支持多继承,但支持多层继承。

单继承:一个子类只能继承一个父类

不支持多继承:子类不能同时继承多个父类

多层继承:子类A继承父类B,父类B可以继承父类C

直接父类、 间接父类

每一个类都直接或者间接的继承于Object

练习.继承的练习(自己设计一个继承体系)

现在有四种动物:布偶猫、中国狸花猫、哈士奇、泰迪。

暂时不考虑属性,只要考虑行为。

请按照继承的思想特点进行继承体系的设计。

四种动物分别有以下的行为:

布偶猫:吃饭、喝水、抓老鼠

中国狸花猫:吃饭、喝水、抓老鼠

哈士奇:吃饭、喝水、看家、拆家

泰迪:吃饭、喝水、看家、蹭一蹭

Animal.Java

package cn.nwafu.b01inheritdemo1;public class Animal {public void eat(){System.out.println("吃饭");}//权限修饰符://private:子类就无法访问了//私有:只能在本类中访问//爸爸的私房钱(自己能用)//注意事项://子类只能访问父类中非私有的成员public void drink(){System.out.println("喝水");}
}

Cat.Java

package cn.nwafu.b01inheritdemo1;public class Cat extends Animal{public void catMouse(){System.out.println("抓老鼠");}
}

Dog.Java

package cn.nwafu.b01inheritdemo1;public class Dog extends Animal{public void loohHome(){System.out.println("看家");}
}

Husky.Java

package cn.nwafu.b01inheritdemo1;import org.w3c.dom.ls.LSOutput;public class Husky extends Dog{public void breakHOme(){System.out.println("拆家");}
}

LiHua.Java

package cn.nwafu.b01inheritdemo1;public class LiHua extends Cat{
}

Ragdoll.Java

package cn.nwafu.b01inheritdemo1;import org.w3c.dom.ls.LSOutput;public class Ragdoll extends Cat {
}

Teddy.Java

package cn.nwafu.b01inheritdemo1;public class Teddy extends Dog{public void touch(){System.out.println("蹭一蹭");}
}

Test.Java

package cn.nwafu.b01inheritdemo1;public class test {public static void main(String[] args) {//创建对象并调用方法//1.创建布偶猫的对象Ragdoll r = new Ragdoll();r.catMouse();r.drink();r.eat();System.out.println("----------------------------");//2.创建哈士奇的对象Husky h = new Husky();h.breakHOme();h.drink();h.eat();h.loohHome();}
}

#误区

误区1:父类私有的东西,子类就无法继承

误区2:父类中非私有的成员,就被子类继承下来了

#子类能继承父类的哪些内容?

继承的内存图(非私有成员变量)

成员方法的继承

#继承中:成员变量的访问特点:就近原则

先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

#继承中:成员方法的访问特点:就近原则

补充:

方法重写

方法重写的本质:子类覆盖了从父类继承下来的虚方法表里面的方法

练习、利用方法的重写设计继承结构

现在有三种动物:哈士奇、沙皮狗、中华田园犬

暂时不考虑属性,只要考虑行为。

请按照继承的思想特点进行继承体系的设计。

三种动物分别有以下的行为:

哈士奇:吃饭(吃狗粮)、喝水、看家、拆家

沙皮狗:吃饭(吃狗粮、吃骨头)、喝水、看家

中华田园犬:吃饭(吃剩饭)、喝水、看家

Dog.Java

package cn.nwafu.b01inheritdemo5;public class Dog {public void eat(){System.out.println("吃狗粮");}public void drink(){System.out.println("喝水");}public void lookHome(){System.out.println("看家");}
}

Husky.Java

package cn.nwafu.b01inheritdemo5;public class Husky extends Dog{public void breakHome(){System.out.println("拆家");}
}

Sharpei.Java

package cn.nwafu.b01inheritdemo5;public class SharPei extends Dog{@Overridepublic void eat(){super.eat();//吃狗粮,可以直接调用父类的方法System.out.println("吃骨头");}
}

ChineseDog.Java

package cn.nwafu.b01inheritdemo5;public class ChineseDog extends Dog{@Overridepublic void eat(){System.out.println("吃剩饭");}
}

DogTest.Java

package cn.nwafu.b01inheritdemo5;public class DogTest {public static void main(String[] args) {Husky h = new Husky();h.eat();h.drink();h.lookHome();h.breakHome();SharPei s = new SharPei();s.eat();s.drink();s.lookHome();ChineseDog c = new ChineseDog();c.eat();c.drink();c.lookHome();}
}

#继承中:构造方法的访问特点

以上总结:

子类不能继承父类的构造方法,但是可以通过super调用

子类构造方法的第一行,有一个默认的super();

默认先访问父类中无参的构造方法,再执行自己。

如果想要方法文父类有参构造,必须手动书写。

#this、super总结

this:理解为一个变量,表示当前方法调用者的地址值;

super:代表父类存储空间。

练习、带有继承结构的标准Javabean类

1.经理

成员变量:工号,姓名,工资,管理奖金

成员方法:工作(管理其他人),吃饭(吃米饭)

2.厨师

成员变量:工号,姓名,工资

成员方法:土作(炒菜),吃饭(吃米饭)

Employee.Java

package cn.nwafu.b01inheritdemo8;public class Employee {//带继承的标准JavaBean类//1.类名见名知意//2.所有的成员变量都需要私有//3.构造方法(空参 带全部参数的构造)//4.get/setprivate String id;private String name;private double salary;public Employee() {}public Employee(String id, String name, double salary) {this.id = id;this.name = name;this.salary = salary;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public void work(){System.out.println("工作");}public void eat(){System.out.println("吃米饭");}
}

Manger.Java

package cn.nwafu.b01inheritdemo8;public class Manger extends Employee{public double bonus;public Manger() {this.bonus = bonus;}
//带全部参数的构造//父类 + 子类public Manger(String id, String name, double salary, double bonus) {super(id, name, salary);this.bonus = bonus;}public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}@Overridepublic void work(){System.out.println("管理其他人");}
}

Cooker.Java

package cn.nwafu.b01inheritdemo8;public class Cooker extends Employee{public Cooker() {}public Cooker(String id, String name, double salary) {super(id, name, salary);}@Overridepublic void work(){System.out.println("炒菜");}
}

Test.Java

package cn.nwafu.b01inheritdemo8;import java.security.spec.RSAOtherPrimeInfo;
import java.util.concurrent.Callable;public class Test {public static void main(String[] args) {Manger m =new Manger("heima001","张三",150000,8000);System.out.println(m.getId()+","+m.getName()+","+m.getSalary()+","+m.getBonus());m.eat();m.work();Cooker c = new Cooker("heima002","赵六",8000);System.out.println(c.getId()+","+c.getName()+","+c.getSalary());c.eat();c.work();}
}

练习、带有继承结构的标准Javabean类

在黑马程序员中有很多员工(Employee)。

按照工作内容不同分教研部员工(Teacher)和行政部员工(AdminStaff)

1.教研部根据教学的方式不同又分为讲师(Lecturer)和助教(Tutor)

2.行政部根据负责事项不同,又分为维护专员(Maintainer),采购专员(Buyer)

3.公司的每一个员工都编号,姓名和其负责的工作

4.每个员工都有工作的功能,但是具体的工作内容又不一样。

最后一个是课后练习,如果有人想练手可以试一试,如果需要源码可以留言,等我把十二课都更新完会一起提供代码,主要是面向对象进阶的练习比较多,发着太麻法了,如果不着急就等我两天哈!

最后说一下学习感受,这几天学习完面向对象进阶,学习的内容渐渐增多,有的时候学习后面就会忘记前面的知识,尤其是多态,继承,与接口,还是要多多练习吧,加油!

第十二课 Java基础篇——面向对象进阶(一)相关推荐

  1. 第九课 Java基础篇——面向对象(综合案例)

    1.文字版格斗游戏 格斗游戏,每个游戏角色的姓名,血量,都不相同,在选定人物的时候(〈new对象的时候),这些信息就应该被确定下来. Role.Java package cn.nwafu;import ...

  2. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  3. Java基础篇——面向对象编程

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- 一个人摸索学习很难坚持 ...

  4. 第七课 Java基础篇——阶段性综合练习

    案例一.卖飞机票 需求:机票价格按照淡季旺季.头等舱和经济舱收费.输入机票原价.月份和头等舱或经济舱. 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季[11月到来年4月) ...

  5. 100天精通Java (基础篇) —面向对象编程1.0【Java分水岭】

    目录 一.类与对象 1.养猫问题 2.使用之前学的技术解决 3.之前技术解决的缺点分析 4.代码 5.对象[属性,行为] 6.类与对象的关系示意图 7.类与对象的区别和联系 8.对象在内存中存在形式( ...

  6. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  7. Java基础篇——类与子类

    1. 什么是类,什么是子类? 类:类是Java程序的基本要素,一个Java应用程序就是由若干个类所构成的.类是Java语言中最重要的"数据类型". 子类:由继承得到的类叫子类. 引 ...

  8. 【程序员养成之路】Java基础篇 8-流进流出的IO流(二)

    以下内容若有误,欢迎私信我或在下方留言,谢谢^_− 目录 IO流(二) 1.特殊操作流 1.1 标准流 1.2 打印流 1.3 对象序列化流 1.4 Properties 拓展1:比较字节流和字节缓冲 ...

  9. 菜鸟学习笔记:Java基础篇4(面向对象三大特征)

    菜鸟学习笔记:Java面向对象篇中 继承 概念 方法重写(override) Object类 Super关键字 组合 final关键字补充 封装 访问控制符 多态 继承 概念 继续上一篇的例子: #m ...

最新文章

  1. Java Web整合开发读书笔记
  2. oracle技术之Oracle 跟踪事件(一)
  3. Verilog 补码加法溢出判断及处理
  4. ux设计_UX设计101:
  5. React开发(203):react代码分割之React.lazy
  6. JavaSE——XML与JSON(语法格式、解析内容)
  7. mysql手动同步_MySql数据库主从手动同步
  8. 关于使用SharedObject来缓存游戏图片或者swf文件资源到客户端本地的研究
  9. 凯撒密码中的字符转换
  10. GameEntity(六)—— IChat
  11. etl调度工具 Taskctl 变量概述
  12. win7 VS2010 Visual Assist X破解
  13. 干货分享!软考中高项案例分析10大管理领域理论背诵要点
  14. iTunes_12.7 iPhone 自定义铃声
  15. kubectl源码分析之rollout status
  16. 该网页无法正常运作 HTTP ERROR 500
  17. 微信支付的软件架构究竟有多牛逼...
  18. How to deactive Virus scan via view IWFNDCCONFIG
  19. 2345手机软件下载
  20. Kafka消费者原理解析

热门文章

  1. 计算机毕业设计ssm个人微博网站1x930系统+程序+源码+lw+远程部署
  2. 树莓派趣味编程——从ABC到XYZ
  3. 2022.08.31 特赞面试
  4. springboot新闻阅读系统 计算机毕设源码63315
  5. 领英推广的效果怎么样,我们应该怎么推广
  6. GWAS分析中SNP解释百分比PVE | 第二篇,GLM模型中如何计算PVE?
  7. css单行、多行超出省略号
  8. [并行计算]Matlab并行计算工具箱(Parallel Computing Toolbox)官方文档教程中文版(1)
  9. 【无机纳米材料科研制图——3ds Max 0104】3dmax石墨烯、碳纳米管、富勒烯建模
  10. 哪款记事本可以在云端存储?云端记事本APP