








import java.util.Scanner;
public class ArrayTest {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
//快捷键自动分配变量名,在后面加.var
// Scanner scanner = new Scanner(System.in);
// Scanner scanner1 = new Scanner(System.in)
// MyTools myTools = new MyTools();
MyTools mt = new MyTools();
int[] arr = {10, 2, -1, 8, 32};
//定位到方法ctrl + B
mt.bubble(arr);
//输出排序后的arr,引用传递
System.out.println("排序后的arr");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//注意
//在idea当我们run一个文件时,会先编译成.class文件
}
}
//查看类的继承关系ctrl+H
class Person {
String name;
int age;
//构造器-快捷键alt+insert
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
//创建一个类MyTools,编写一个方法,可以完成对int数组冒泡排序的功能
//从小到大
class MyTools {
public void bubble(int[] arr) {
//冒泡排序
int temp = 0;
for (int i = 0; i < arr.length; i++) {//外层循环次数arr.length-1
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}

public class TestTemplate {
//模板快捷键
//输出main
public static void main(String[] args) {
//输入sout
System.out.println();
//输入fori
// for (int i = 0; i < ; i++) {
//
// }
}
}



package com.use;
import com.xiaoqiang.Dog;
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
System.out.println(dog);//com.xiaoqiang.Dog@1540e19d
com.xiaoming.Dog dog1 = new com.xiaoming.Dog();
System.out.println(dog1);//com.xiaoming.Dog@677327b6
}
}
package com.xiaoming;
public class Dog {
}
package com.xiaoqiang;
public class Dog {
}



package com.hspedu.pkg;
import java.util.Arrays;
//注意
//需要使用到哪个类,就导入哪个类即可,不建议使用*导入
//表示只会引入java.util包下的Scanner
import java.util.Scanner;
//表示引入java.util包下的所有类
//import java.util.*;
public class Import01 {
public static void main(String[] args) {
//使用系统系统的Arrays完成数组排序
int[] arr = {-1,20,2,13,3};
//对上面数组进行排序
//传统方法,自己编写排序(冒泡)
//系统提供了相关的类,可以方便完成Arrays
Arrays.sort(arr);
//输出排序结果
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}

//package的作用是声明当前类所在的包,需要放在类(或者文件)的最上面
//一个类中最多只有一句package
package com.hspedu.pkg;
//import指令位置放在package的下面,在类定义之前,可以有多句且没有顺序要求
import java.util.Arrays;
import java.util.Scanner;
//类定义
public class PkgDetail {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {0,-1,1};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + " ");
}
}
}



package com.hspedu.modifier;
//只有默认和public才能修饰类
//修饰符可以用来修饰类中的属性和成员方法以及类
public class A {
//四个属性,用不同访问修饰符修饰
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public void m1() {
//在同一个类下,可以访问public,protected和默认,private修饰的属性
System.out.print("n1=" + n1 + " ");
System.out.print("n2=" + n2 + " ");
System.out.print("n3=" + n3 + " ");
System.out.print("n4=" + n4 + " ");
}
protected void m2(){}
void m3(){}
private void m4(){}
public void hi(){
//在同一个类下,可以访问public,protected和默认,private修饰的方法
m1();
m2();
m3();
m4();
}
}
package com.hspedu.modifier;
public class B {
public void say() {
A a = new A();
//在同一个包下,可以访问public,protected和默认修饰的属性
System.out.print("\nn1=" + a.n1 + " ");
System.out.print("n2=" + a.n2 + " ");
System.out.print("n3=" + a.n3 + " ");
//n4是private的访问控制,无法访问
//System.out.println("n1=" + a.n4);//错误不能调用
//在同一个包下,可以访问public,protected和默认修饰的方法
a.m1();
a.m2();
a.m3();
//a.m4();//错误不能调用
}
}
package com.hspedu.modifier;
public class Test {
public static void main(String[] args) {
A a = new A();
a.m1();
B b = new B();
b.say();
}
}
//只有默认和public可以修饰类
class Tiger {}
package com.hspedu.pkg;
import com.hspedu.modifier.A;
public class Test {
public static void main(String[] args) {
A a = new A();
//在不同包下,可以访问public修饰的属性
//不能访问protected,默认private修饰的属性或方法
System.out.println("n1=" + a.n1);
// System.out.println("n2=" + a.n2);//错误不能调用
// System.out.println("n3=" + a.n3);//错误不能调用
// System.out.println("n4=" + a.n4);//错误不能调用
//在不同包下,可以访问public修饰的方法,不能访问a.m2(),a.m3(),a.m4()
a.m1();
}
}





package com.hspedu.encap;
public class Encapsulation01 {
public static void main(String[] args) {
//如果要使用快捷键alt+r,需要先配置主类
Person person = new Person();
person.setName("jack");
person.setAge(30);
person.setSalary(30000);
System.out.println(person.info());
System.out.println(person.getSalary());
}
}
class Person {
public String name;//名字公开
private int age;//年龄私有
private double salary;//...
//自己写setxxx和getxxx太慢,使用快捷键
//然后根据要求来完善我们的代码.
public String getName() {
return name;
}
public void setName(String name) {
//加入对数据的校验,相当于增加了业务逻辑
if(name.length() >= 2 && name.length() <= 6){
this.name = name;
}else{
System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
this.name = "无名人";
}
}
public int getAge(){
return age;
}
public void setAge(int age) {
if(age >= 1 && age <= 120){
this.age = age;
}else{
System.out.println("你设置的年龄不对,年龄需要在1-120,默认年龄18");
this.age = 18;//给一个默认年龄
}
}
public double getSalary() {
//可以这里增加对当前对象的权限判断
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//写一个方法,返回属性信息
public String info(){
return "信息为name=" + name + " age=" + age + " 薪水=" + salary;
}
}

package com.hspedu.encap;
public class Encapsulation01 {
public static void main(String[] args) {
//如果要使用快捷键alt+r,需要先配置主类
Person person = new Person();
person.setName("jack");
person.setAge(30);
person.setSalary(30000);
System.out.println(person.info());
System.out.println(person.getSalary());
// 如果直接使用构造器指定属性
Person smith = new Person("smith", 80, 50000);
System.out.println("===smith的信息===");
System.out.println(smith.info());
}
}
class Person {
public String name;//名字公开
private int age;//年龄私有
private double salary;//...
//构造器alt+insert
public Person(){
}
//有3个属性的构造器
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
//可以将set方法写在构造器中,这样仍然可以验证
setName(name);
setAge(age);
setSalary(salary);
}
//自己写setxxx和getxxx太慢,使用快捷键
//然后根据要求来完善我们的代码.
public String getName() {
return name;
}
public void setName(String name) {
//加入对数据的校验,相当于增加了业务逻辑
if(name.length() >= 2 && name.length() <= 6){
this.name = name;
}else{
System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
this.name = "无名人";
}
}
public int getAge(){
return age;
}
public void setAge(int age) {
if(age >= 1 && age <= 120){
this.age = age;
}else{
System.out.println("你设置的年龄不对,年龄需要在1-120,默认年龄18");
this.age = 18;//给一个默认年龄
}
}
public double getSalary() {
//可以这里增加对当前对象的权限判断
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//写一个方法,返回属性信息
public String info(){
return "信息为name=" + name + " age=" + age + " 薪水=" + salary;
}
}

package com.hspedu.encap;
public class Account {
//为了封装,将3个属性设置为private
private String name;
private double balance;
private String pwd;
//两个构造器
public Account(){
}
public Account(String name, double balance, String pwd) {
this.setName(name);
this.setBalance(balance);
this.setPwd(pwd);
}
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() >= 2 && name.length() <= 4){
this.name = name;
}else{
System.out.println("名字输入错误,姓名要求(长度为2,3,4),默认值无名");
this.name = "无名";
}
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
if(balance > 20){
this.balance = balance;
}else{
System.out.println("余额必须>20,默认为0");
}
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
if(pwd.length() == 6){
this.pwd = pwd;
}else{
System.out.println("密码必须是6位,默认密码为000000");
this.pwd = "000000";
}
}
//显示账号信息
public void showInfo(){
//可以增加一个权限校验
System.out.println("账号信息 name=" + name + " 余额=" + balance + " 密码=" + pwd);
// if() {
// System.out.println("账号信息 name=" + name + " 余额=" + balance + " 密码=");
// }else{
// System.out.println("你无权查看...");
// }
}
}
package com.hspedu.encap;
public class AccountTest {
public static void main(String[] args) {
//创建Account
Account account = new Account("jack",60,"123456");
//Account account = new Account();
//account.setName("jack");
//account.setBalance(60);
//account.setPwd("123456");
account.showInfo();
}
}



package com.hspedu.extend;
//小学生->模拟小学生考试的情况
public class Pupil {
public String name;
public int age;
private double score;
public void setScore(double score) {
this.score = score;
}
public void testing(){
System.out.println("小学生" + name + "正在考小学数学...");
}
public void showInfo() {
System.out.println("小学生名" + name + "年龄" + age + "分数" +score);
}
}
package com.hspedu.extend;
//大学生考试情况-模拟大学生类
public class Graduate {
public String name;
public int age;
private double score;
public void setScore(double score) {
this.score = score;
}
public void testing(){
System.out.println("大学生" + name + "正在考大学数学...");
}
public void showInfo() {
System.out.println("大学生" + name + "年龄" + age + "分数" +score);
}
}
package com.hspedu.extend;
public class Extends01 {
public static void main(String[] args) {
Pupil pupil = new Pupil();
pupil.name = "银角大王";
pupil.age = 10;
pupil.testing();
pupil.setScore(60);
pupil.showInfo();
System.out.println("=====");
Graduate graduate = new Graduate();
graduate.name = "金角大王";
graduate.age = 22;
graduate.testing();
graduate.setScore(100);
graduate.showInfo();
}
}

package com.hspedu.extend.improve_;
public class Pupil extends Student{
public void testing(){
System.out.println("小学生" + name + "正在考小学数学...");
}
}
package com.hspedu.extend.improve_;
public class Graduate extends Student{
public void testing(){
System.out.println("大学生" + name + "正在考大学数学...");
}
}
package com.hspedu.extend.improve_;
//父类
public class Student {
//共有属性
public String name;
public int age;
private double score;
//共有方法
public void setScore(double score) {
this.score = score;
}
public void showInfo() {
System.out.println("学生" + name + "年龄 " + age + " 分数 " +score);
}
}
package com.hspedu.extend.improve_;
import com.hspedu.extend.Graduate;
import com.hspedu.extend.Pupil;
public class Extends01 {
public static void main(String[] args) {
com.hspedu.extend.Pupil pupil = new Pupil();
pupil.name = "银角大王~";
pupil.age = 11;
pupil.testing();
pupil.setScore(50);
pupil.showInfo();
System.out.println("=====");
com.hspedu.extend.Graduate graduate = new Graduate();
graduate.name = "金角大王~";
graduate.age = 23;
graduate.testing();
graduate.setScore(80);
graduate.showInfo();
}
}






package com.hspedu.encap;
public class TopBase {//父类是Object
public TopBase() {
System.out.println("父类的父类构造器TopBase()被调用");
}
}
package com.hspedu.extend;
import com.hspedu.encap.TopBase;
public class Base extends TopBase {//父类
//4个属性
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public Base() {//父类的无参构造器
System.out.println("父类Base()构造器被调用...");
}
public Base(String name,int age){//父类的有参构造器1
System.out.println("父类Base(String name,int age)被调用...");
}
public Base(String name){//父类的有参构造器2
System.out.println("父类Base(String name)被调用...");
}
//父类提供public方法,返回n4
public int getN4(){
return n4;
}
public void test100() {
System.out.println("test100");
}
protected void test200() {
System.out.println("test200");
}
void test300() {
System.out.println("test300");
}
private void test400() {
System.out.println("test400");
}
public void callTest400(){
test400();
}
}
package com.hspedu.extend;
import java.util.Arrays;
//输入ctrl + H 可以看到类的继承关系
public class Sub extends Base {//子类
public Sub(String name,int age){
//1.调用父类的无参构造器,或者什么都不写
//super();//父类的无参构造器
//2.调用父类的Base(String name)构造器
//细节4:如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)
//super("hsp");
//3.调用父类的Base(String name,int age)构造器
super("hsp",11);
//细节5:super在使用时,必须放在构造器的第一行(super只能在构造器中使用)
//细节6:super()和this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
System.out.println("子类Sub(String name,int age)构造器被调用....");
}
public Sub() {//子类的无参构造器
//细节2:默认隐藏调用父类的无参构造器
//super();
super("smith",10);
System.out.println("子类Sub()构造器被调用....");
}
//细节3-1:当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器
public Sub(String name) {
//细节3-2:如果父类没有提供无参构造器,则必须在子类的构造器中用super去指定使用
//父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过
super("tom",30);
System.out.println("子类Sub(String name) 构造器被调用....");
}
public void sayOk() {//子类方法
//细节1:非私有的属性和方法可以在子类直接访问
//私有的属性和方法不可以在子类直接访问
System.out.println(n1 + " " + n2 + " " + n3 + " ");
test100();
test200();
test300();
//test400();//错误
//属性n4无法输出,要通过父类提供的公共方法去访问
System.out.println("n4=" + getN4());
//要通过父类提供的公共方法去访问
callTest400();
}
}
package com.hspedu.extend;
public class ExtendsDetail {
public static void main(String[] args) {
// System.out.println("==第1个对象==");
// Sub sub = new Sub();//创建子类对象sub
// System.out.println("==第2个对象==");
// Sub sub2 = new Sub("jack");//创建子类对象sub2
System.out.println("==第3个对象==");
Sub sub3 = new Sub("king",10);//创建子类对象sub3
//sub.sayOk();
}
}


package com.hspedu.extend;
/**
讲解继承的本质
*/
public class ExtendsTheory {
public static void main(String[] args) {
Son son = new Son();//内存的布局
//1.首先看子类是否有该属性
//2.如果子类有这个属性,并且可以访问(比如private 私有)
//3.如果子类没有这个属性,就看父类有没有这个属性(如果父类有该属性,并且可以访问,就返回信息...)
//4.如果父类没有就按照3.的规则,就继续找上级父类,直到Object...
System.out.println(son.name);//返回的是大头儿子
// System.out.println(son.age);//返回的是39
System.out.println(son.getAge());//返回的是39
System.out.println(son.hobby);//返回的是旅游
}
}
class Grandpa {//爷类Grandpa
String name = "大头爷爷";
String hobby = "旅游";
}
class Father extends Grandpa {//父类Father
String name = "大头爸爸";
private int age = 39;
public int getAge() {
return age;
}
}
class Son extends Father {//子类Son
String name = "大头儿子";
}

package com.hspedu.extend.exercise;
public class ExtendsExercise01 {
public static void main(String[] args) {
B b = new B();
/**
* 结果
* a
* b name
* b
*/
}
}
class A {
A() {
System.out.println("a");
}
A(String name) {
System.out.println("a name");
}
}
class B extends A {
B() {
this("abc");//有了this以后就没有super()了
System.out.println("b");
}
B(String name) {
//解题关键:分析出有默认的super();
System.out.println("b name"); }
}

package com.hspedu.extend.exercise;
public class ExtendsExercise02 {
public static void main(String[] args) {
C c = new C();
/**
* 结果:
* 我是A类
* hahah我是B类的有参构造器
* 我是C类的有参构造
* 我是C类的无参构造
* */
}
}
class A{//A类
public A() {
System.out.println("我是A类");
}
}
class B extends A{//B类,继承A类
public B(){
System.out.println("我是B类的无参构造器");
}
public B(String name){
//解题关键:分析出有默认的super();
System.out.println(name + "我是B类的有参构造器");
}
}
class C extends B{
public C(){
this("hello");
System.out.println("我是C类的无参构造");
}
public C(String name){
super("hahah");
System.out.println("我是c类的有参构造");
}
}

package com.hspedu.extend.exercise;
public class Computer {
private String cpu;
private int memory;
private int disk;
public Computer(String cpu, int memory, int disk) {
this.cpu = cpu;
this.memory = memory;
this.disk = disk;
}
public String getDetails(){
return " cpu=" + cpu + " memory=" + memory + " disk=" + disk;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public int getMemory() {
return memory;
}
public void setMemory(int memory) {
this.memory = memory;
}
public int getDisk() {
return disk;
}
public void setDisk(int disk) {
this.disk = disk;
}
}
package com.hspedu.extend.exercise;
public class PC extends Computer{
private String brand;
//这里IDEA 根据继承的规则,自动把构造器的调用写好
//这里也体现出继承的一个基本设计的基本思想,父类的构造器完成父类属性初始化
//子类的构造器就完成子类的属性初始化
public PC(String cpu, int memory, int disk, String brand) {
super(cpu, memory, disk);
this.brand = brand;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public void printInfo() {
System.out.println("PC信息=");
//调用父类的getDetails方法,得到相关属性...
System.out.println(getDetails() + " brand=" + brand);
// System.out.println(getCpu() + getDisk() + getMemory() + getBrand());
}
}
package com.hspedu.extend.exercise;
public class NotePad extends Computer{
private String color;
public NotePad(String cpu, int memory, int disk, String color) {
super(cpu, memory, disk);
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void printInnfo() {
System.out.println("PC信息=");
System.out.println(getDetails() + " color=" + color);
}
}
package com.hspedu.extend.exercise;
public class ExtendsExercise03 {
public static void main(String[] args) {
PC pc = new PC("intel",16,500,"IBM");
pc.printInfo();
NotePad notepad = new NotePad("mac",24,1000,"black");
notepad.printInnfo();
}
}



package com.hspedu.super_;
public class B extends A {
public int n1 = 888;
//编写测试方法
public void test() {
//细节3:Super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super
//去访问爷爷类的成员;如果多个基类(上级类)中都有同名的成员,使用super访问遵循就近原则
//A->B->C,当然也需要遵守访问权限的相关规则
System.out.println("super.n1=" + super.n1);
super.cal();
}
//语法1:访问父类的属性,但不能访问父类的private属性 [案例]super。属性名
public void hi() {
//super.n4为父类的private属性不能访问
System.out.println(super.n1 + " " + super.n2 + " " +super.n3 /*+ super.n4*/);
}
//语法2:访问父类的方法,不能访问父类的private方法[案例] super。方法名(参数列表)
public void ok(){
super.test100();
super.test200();
super.test300();
//super.test400();父类的private方法不能访问
}
//语法3:访问父类的构造器:super(参数列表);只能放在构造器的第一句,只能出现一句:
public B(){
// super();
// super("jack");
super("jack",10);
}
public void cal() {
System.out.println("B类的cal()方法...");
}
public void sum() {
//细节1:调用父类的构造器的好处(分工明确,父类属性由父类初始化,子类的属性由子类初始化)
System.out.println("B类的sum()");
//细节2-1:希望调用父类A的cal方法
//这时,因为子类B没有cal方法,因此可以使用下面三种方式:
//找cal方法时,顺序是:
//1.先找本类,如果有,则调用
//2.如果没有,则找父类(如果有并可以调用则调用)
//3.如果父类没有,则继续找父类的父类,整个规则就是一样的。
//提示:如果查找方法的过程中,找到了,但是不能访问,则报错
// 如果查找方法的过程中,没有找到,则提示方法不存在
cal();
this.cal();//等价于cal()
super.cal();//直接进入上面的第2步找父类,其他规则一样
/**
* 结果:
* B类的sum()
* B类的cal()方法...
* B类的cal()方法...
* A类的cal()方法...
* */
//细节2-2:演示访问属性的规则
//n1和this查找的规则是
//1.先找本类,如果有,则调用
//2.如果没有,则找父类(如果有并可以调用则调用)
//3.如果父类没有,则继续找父类的父类,整个规则就是一样的。
//提示:如果查找属性的过程中,找到了,但是不能访问,则报错
// 如果查找属性的过程中,没有找到,则提示属性不存在
System.out.println(n1);
System.out.println(this.n1);
//super.n1的顺序是直接找父类,其他的规则一样
System.out.println(super.n1);
/**
* 结果:
* 888
* 888
* 100
* */
}
}
package com.hspedu.super_;
public class A extends Base{
//4个属性
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public A(){}
public A(String name) {}
public A(String name,int age){}
public void cal() {
System.out.println("A类的cal()方法...");
}
public void test100() {
}
protected void test200() {
}
void test300() {
}
private void test400() {
}
}
package com.hspedu.super_;
public class Base {
public int n1 = 999;
public int age = 111;
public void cal() {
System.out.println("Base类的cal()方法...");
}
public void eat() {
System.out.println("Base类中eat()方法...");
}
}
package com.hspedu.super_;
public class Super01 {
public static void main(String[] args) {
B b = new B();//子类对象
// b.sum();
b.test();
}
}



package com.hspedu.override_;
public class Dog extends Animal{
//细节1:子类的方法的形参列表,方法名称要和父类方法的形参列表,方法名称完全一样
//1.因为Dog是Animal子类
//2.Dog的cry方法和Animal的cay()方法定义形式一样(名称,返回类型,参数)
//3.Dog的cry()方法重写了Animal的cry()方法
public void cry() {
System.out.println("小狗汪汪叫");
}
//细节2:子类方法的返回类型和父类返回类型一样
//或者是父类返回类型的子类,比如父类返回类型是Object,子类方法返回类型是String
public String m1(){
return null;
}
//细节3:子类方法不能缩小父类方法的访问权限
//public > protected > 默认 > private
public void eat() {
}
}
package com.hspedu.override_;
public class Animal {
public void cry() {
System.out.println("动物叫唤...");
}
public Object m1() {
return null;
}
protected void eat() {
}
}
package com.hspedu.override_;
public class Override01 {
public static void main(String[] args) {
//演示方法重写的情况
Dog dog = new Dog();
dog.cry();//小狗汪汪叫
}
}


package com.hspedu.override_;
//编写一个Student类,继承Person类,增加id、score属性/private
//以及构造器,定义say方法(返回自我介绍的信息)
public class Student extends Person {
private int id;
private double score;
public Student(String name, int age, int id, double score) {
super(name, age);//调用父类构造器
this.id = id;
this.score = score;
}
//say方法
public String say(){//体现super好处,代码复用
return super.say() + ",id是" + id + ",分数是" + score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
package com.hspedu.override_;
//编写一个Person类,包括属性/private(name、age),构造
// 器,方法say(返回自我介绍的字符串)
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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 say(){
return "我的名字是:" + name + ",我的年龄是" + age;
}
}
package com.hspedu.override_;
public class OverrideExercise {
//在main中分别创建Person和Student对象,调用say方法输出自我介绍
public static void main(String[] args) {
Person jack = new Person("jack",10);
System.out.println(jack.say());
Student smith = new Student("smith",19,144564,92.8);
System.out.println(smith.say());
}
}


package com.hspedu.poly_;
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hspedu.poly_;
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Fish extends Food {
public Fish(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Bone extends Food {
public Bone(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Food {
private String name;
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hspedu.poly_;
public class Master {
private String name;
public Master(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//完成主人给小狗喂食骨头
public void feed(Dog dog,Bone bone){
System.out.println("主人" + name + "给" + dog.getName() + "吃" + bone.getName());
}
//完成主人给小猫喂食黄花鱼
public void feed(Cat cat,Fish fish){
System.out.println("========");
System.out.println("主人" + name + "给" + cat.getName() + "吃" + fish.getName());
}
//如果动物很多,食物很多
//feed方法很多,不利于管理和维护
//Pig --> Rice
//Tiger --> meat
//...
}
package com.hspedu.poly_;
public class poly01 {
public static void main(String[] args) {
Master tom = new Master("tom");
Dog dog1 = new Dog("大黄狗");
Bone bone1 = new Bone("大棒骨");
tom.feed(dog1,bone1);
Cat cat1 = new Cat("小花猫");
Fish fish1 = new Fish("黄花鱼");
tom.feed(cat1,fish1);
}
}

package com.hspedu.poly_;
public class PloyMethod {
public static void main(String[] args) {
//方法重载体现多态
A a = new A();
//传入不同的参数,就会调用不同的sum方法,就体现多态
System.out.println(a.sum(10,20));
System.out.println(a.sum(20,30,40));
//方法重写体现多态
B b = new B();
a.say();
b.say();
}
}
class B {//父类
public void say() {
System.out.println("B say()方法被调用...");
}
}
class A extends B {//子类
public int sum(int n1,int n2) {//和下面sum构成重载
return n1 + n2;
}
public int sum(int n1, int n2, int n3){
return n1 + n2 + n3;
}
public void say() {
System.out.println("A say()方法被调用...");
}
}

Animal.java
package com.hspedu.poly_.objpoly_;
public class Animal {
public void cry(){
System.out.println("Animal cry()动物再叫...");
}
}
Cat.java
package com.hspedu.poly_.objpoly_;
public class Cat extends Animal{
public void cry(){
System.out.println("Cat cry()小猫喵喵叫...");
}
}
Dog.java
package com.hspedu.poly_.objpoly_;
public class Dog extends Animal{
public void cry(){
System.out.println("Dog cry()小狗汪汪叫...");
}
}
PolyObject.java
package com.hspedu.poly_.objpoly_;
public class PolyObject {
public static void main(String[] args) {
//体验对象多态的特点
//animal编译类型就是Animal,运行类型就是Dog
Animal animal = new Dog();
//因为运行时,执行到该行时,animal运行类型就是Dog,所以cry就是dog cry
animal.cry();//Dog cry()小狗汪汪叫...
//animal编译类型是Animal,运行类型就是Cat
animal = new Cat();
animal.cry();//Cat cry()小猫喵喵叫...
}
}

package com.hspedu.poly_;
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hspedu.poly_;
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
}
com.hspedu.poly_.Pig.java
package com.hspedu.poly_;
public class Pig extends Animal {
public Pig(String name) {
super(name);
}
}
com.hspedu.poly_.Rice.java
package com.hspedu.poly_;
public class Rice extends Food{
public Rice(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Fish extends Food {
public Fish(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Bone extends Food {
public Bone(String name) {
super(name);
}
}
package com.hspedu.poly_;
public class Food {
private String name;
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.hspedu.poly_;
public class Master {
private String name;
public Master(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//使用多态机制 ,可以统一管理主人喂食的问题
//animal编译类型是Animal,可以指向(接收)Animal子类的对象
//food变异类型是Food,可以指向(接收)Food子类的对象
public void feed(Animal animal,Food food){
System.out.println("主人" + name + "给" + animal.getName() + "吃" + food.getName());
}
// //主人给小狗喂食,骨头
// public void feed(Dog dog,Bone bone){
// System.out.println("主人" + name + "给" + dog.getName() + "吃" + bone.getName());
// }
// public void feed(Cat cat,Fish fish){
// System.out.println("主人" + name + "给" + cat.getName() + "吃" + fish.getName());
// }
}
package com.hspedu.poly_;
public class Poly01 {
public static void main(String[] args) {
Master tom = new Master("汤姆");
Dog dog = new Dog("大黄~");
Bone bone = new Bone("大棒骨~");
tom.feed(dog,bone);
System.out.println("==============");
Cat cat = new Cat("小花猫~");
Fish fish = new Fish("黄花鱼~");
tom.feed(cat,fish);
System.out.println("==============");
//添加给小猪喂米饭
Pig pig = new Pig("小白猪");
Rice rice = new Rice("米饭");
tom.feed(pig,rice);
//输出结果为
//主人汤姆给大黄~吃大棒骨~
//==============
//主人汤姆给小花猫~吃黄花鱼~
//==============
//主人汤姆给小白猪吃米饭
}
}


Animal.java
package com.hspedu.poly_.detail_;
public class Animal {
String name = "动物";
int age = 10;
public void sleep(){
System.out.println("睡");
}
public void run(){
System.out.println("跑");
}
public void eat(){
System.out.println("吃");
}
private void show(){
System.out.println("hello,你好");
}
}
Cat.java
package com.hspedu.poly_.detail_;
public class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){//Cat特有方法
System.out.println("猫抓老鼠");
}
}
Dog.java
package com.hspedu.poly_.detail_;
public class Dog extends Animal {
}
PolyDetail.java
package com.hspedu.poly_.detail_;
public class PolyDetail {
public static void main(String[] args) {
//向上转型:父类的引用指向了子类的对象
//语法:父类类型引用名=new 子类类型();
Animal animal = new Cat();
// Object obj = new Cat();//Object也是Cat的父类的父类,可以使用
System.out.println("ok~~");
//向上转型方法的规则:
//1.可以调用父类中的所有成员(需要遵守访问权限)
//2.但是不能调用子类的特有的成员(属性和方法)
//3.因为在编译阶段,能调用哪些成员,是由编译类型来决定的
//animal.catchMouse();错误
//4.最终运行效果看子类(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法,然后调用,规则和我们前面讲的方法调用规则一致。
animal.eat();//猫吃鱼
animal.run();//跑
//animal.show();//错误,private权限受阻
animal.sleep();//睡
//多态的向下转型:
//调用Cat的catchMouse方法
//1.语法:子类类型 引用名 = (子类类型) 父类引用
//cat的编译类型Cat,运行类型是Cat
Cat cat = (Cat) animal;
cat.catchMouse();//猫抓老鼠
//2.要求父类的引用必须指向的是当前目标类型的对象
//Dog dog = (Dog) animal;//错误,类异常
}
}

PolyDetail02.java
package com.hspedu.poly_.detail_;
public class PolyDetail02 {
public static void main(String[] args) {
//属性没有重写之说,属性的值看编译类型
Base base = new Sub();//向上转型
System.out.println(base.count);//10(直接看编译类型)
Sub sub = new Sub();
System.out.println(sub.count);//20
}
}
class Base {
int count = 10;
}
class Sub extends Base{
int count = 20;
}
PolyDetail03.java
package com.hspedu.poly_.detail_;
public class PolyDetail03 {
public static void main(String[] args) {
BB bb = new BB();
System.out.println(bb instanceof BB);//true
System.out.println(bb instanceof AA);//true
//aa的编译类型是AA,运行类型是BB
AA aa = new BB();
System.out.println(aa instanceof AA);//true
System.out.println(aa instanceof BB);//true
//结论:判断对象的运行类型是否为XX类型或者XX类型的子类型
Object obj = new Object();
System.out.println((obj instanceof AA));//false
String str = "hello";
//System.out.println(str instanceof AA);//没有任何关系
System.out.println(str instanceof Object);//true
}
}
class AA{
}
class BB extends AA{
}

PolyExercise01.java
package com.hspedu.poly_.exercise_;
public class PolyExercise01 {
public static void main(String[] args) {
double d = 13.4;//ok
long l = (long)d;//ok
System.out.println(l);//13
int in = 5;//ok
//boolean b = (boolean)in;错误,boolean->int
Object obj = "hello";//ok,向上转型
String objStr = (String)obj;//ok,向下转型
System.out.println(objStr);//hello
Object objPri = new Integer(5);//ok,向上转型
String str = (String)objPri;//错误class ClassCastException指向Integer的父类引用,转成String
Integer sr1 = (Integer)objPri;//ok,向下转型
}
}

PolyExercise02.java
package com.hspedu.poly_.exercise_;
public class PolyExercise02 {
public static void main(String[] args) {
Sub s = new Sub();
System.out.println(s.count);//20
s.display();//20
Base b = s;
System.out.println(b == s);//true
System.out.println(b.count);//10
b.display();//20
}
}
class Base{
int count = 10;
public void display(){
System.out.println(this.count);
}
}
class Sub extends Base{
int count = 20;
public void display(){
System.out.println(this.count);
}
}

DynamicBinding.java
package com.hspedu.poly_.dynamic_;
public class DynamicBinding {
public static void main(String[] args) {
//a的编译类型A,运行类型B
A a = new B();//向上转型
System.out.println(a.sum());//30
System.out.println(a.sum1());//20
}
}
class A{
public int i = 10;
//动态绑定机制:
//1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
public int sum(){
return getl() + 10;
}
//2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
public int sum1(){
return i + 10;
}
public int getl(){//父类getI
return i;
}
}
class B extends A{
public int i = 20;
// public int sum(){
// return i + 20;
// }
public int getl(){//子类getI()
return i;
}
// public int sum1(){
// return i + 10;
// }
}

Person.java
package com.hspedu.poly_.polyarr_;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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 say(){
return name + "\t" + age;
}
}
Student.java
package com.hspedu.poly_.polyarr_;
public class Student extends Person{
private double score;
public Student(String name, int age, double score) {
super(name, age);
this.score = score;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//特有方法
public void study(){
System.out.println("学生" + getName() + "正在学java课程 ");
}
//重写父类的say()
public String say() {
return "学生" + super.say() + " score=" + score;
}
}
Teacher.java
package com.hspedu.poly_.polyarr_;
public class Teacher extends Person{
private double salary;
public Teacher(String name, int age, double salary) {
super(name, age);
this.salary = salary;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//特有方法
public void teach(){
System.out.println("老师" + getName() + "正在讲java课程 ");
}
//重写父类的say()
public String say() {
return "老师" + super.say() + " salary=" + salary;
}
}
PolyArray.java
package com.hspedu.poly_.polyarr_;
public class PolyArray {
public static void main(String[] args) {
//应用实例:现有一个继承结构如下:要求创建1个Peron对象
//2个Student 对象和2个Teacher对象,统一放在数组中,并调用每个对象say()方法。
Person[] persons = new Person[5];
persons[0] = new Person("jack",20);
persons[1] = new Student("mary",18,99.8);
persons[2] = new Student("Smith",19,66.6);
persons[3] = new Teacher("Scott",30,20000);
persons[4] = new Teacher("King",50,25000);
//循环遍历多态数组,调用say()方法
for (int i = 0; i < persons.length; i++) {
//persons[i]编译类型是Person,运行类型是根据实际情况由JVM来判断
System.out.println(persons[i].say());//动态绑定机制
//使用类型判断和向下转型
if(persons[i] instanceof Student){//判断persons[i]的运行类型是不是Student
Student student = (Student)persons[i];
student.study();
//((Student)persons[i]).study();
}else if(persons[i] instanceof Teacher){
Teacher teacher = (Teacher)persons[i];
teacher.teach();
//((Teacher)persons[i]).teach();
}else if(persons[i] instanceof Person){
}else{
System.out.println("你的类型有误,请自己检查");
}
}
}
}

Employee.java
package com.hspedu.poly_.polyparameter_;
public class Employee {
private String name;
private double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
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 double getAnnual(){
return 12 * salary;
}
}
Worker.java
package com.hspedu.poly_.polyparameter_;
public class Worker extends Employee{
public Worker(String name, double salary) {
super(name, salary);
}
public void work(){
System.out.println("普通员工" + getName() + " is working");
}
//重写获取年薪的方法
public double getAnnual() {//因为普通员工没有其他收入,直接调用父类方法
return super.getSalary();
}
}
Manager.java
package com.hspedu.poly_.polyparameter_;
public class Manager extends Employee{
private double bonus;
public Manager(String name, double salary, double bonus) {
super(name, salary);
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
public void manage(){
System.out.println("经理" + getName() + " is managing");
}
//重写获取年薪的方法
public double getAnnual() {
return super.getAnnual() + bonus;
}
}
PolyParameter.java
package com.hspedu.poly_.polyparameter_;
public class PolyParameter {
public static void main(String[] args) {
Worker tom = new Worker("tom", 2500);
Manager milan = new Manager("milan", 5000, 200000);
PolyParameter polyParameter = new PolyParameter();
polyParameter.showEmpAnnual(tom);//2500.0
polyParameter.showEmpAnnual(milan);//260000.0
System.out.println("=======");
polyParameter.testWork(tom);//普通员工tom is working
polyParameter.testWork(milan);//经理milan is managing
}
//实现获取任何员工对象的年工资,并在main方法中调用该方法[e.getAnnual()]
public void showEmpAnnual(Employee e){
System.out.println(e.getAnnual());//动态绑定机制
}
//添加一个方法,testWork,如果是普通与昂,则调用work方法,如果是经理,则调用manage方法
public void testWork(Employee e){
if(e instanceof Worker){
((Worker) e).work();
}else if(e instanceof Manager){
((Manager) e).manage();
}else{
System.out.println("不做处理");
}
}
}


Equals01.java
package com.hspedu.object_;
public class Equals01 {
public static void main(String[] args) {
A a = new A();
A b = a;
A c = b;
System.out.println(a == c);//true
System.out.println(b == c);//true
B bObj = a;
System.out.println(bObj == c);//true
}
}
class A extends B{
}
class B{
}

Equals01.java
package com.hspedu.object_;
public class Equals01 {
public static void main(String[] args) {
A a = new A();
A b = a;
A c = b;
System.out.println(a == c);//true
System.out.println(b == c);//true
B bObj = a;
System.out.println(bObj == c);//true
int num1 = 10;
double num2 = 10.0;
System.out.println(num1 == num2);//true
//equals方法,源码怎么查看
//把光标放在equals上,直接输入ctrl+b
//1.JDK源码String 类的equals方法
/*
//把Object的equals方法重写了,变成了比较两个字符串值是否相同
public boolean equals(Object anObject) {
if (this == anObject) {//如果是同一个对象
return true;//返回true
}
if (anObject instanceof String) {//判断类型
String anotherString = (String)anObject;//向下转型
int n = value.length;
if (n == anotherString.value.length) {//如果长度相同
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {//然后一个个比较字符
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;//如果比较的不是字符串,直接返回false
}*/
String str1 = new String("hspedu");
String str2 = new String("hspedu");
System.out.println(str1 == str2);//false
System.out.println(str1.equals(str2));//true
//2.JDK源码Object类的equals方法
/*
//即Object的equals方法默认就是比较对象地址是否相同
//也就是判断两个对象是不是同一个对象
public boolean equals(Object obj) {
return (this == obj);
}
*/
//3.JDK源码Integer类的equals方法
//也重写的Object的equals方法,变成了判断两个值是否相同
/*
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
* */
Integer integer1 = new Integer(1000);
Integer integer2 = new Integer(1000);
System.out.println(integer1 == integer2);//false
System.out.println(integer1.equals(integer2));//true
}
}
class A extends B{
}
class B{
}

EqualsExercise01.java
package com.hspedu.object_;
public class EqualsExercise01 {
public static void main(String[] args) {
Person person1 = new Person("jack", 10, '男');
Person person2 = new Person("jack", 10, '男');
System.out.println(person1.equals(person2));//假,因为没有重写,只比较person1和person2是否是同一个对象,重写之后,比较两个Person对象的各个属性值,返回true
}
}
//判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都一样,则返回true,反之false
class Person{//extends Object
private String name;
private int age;
private char gender;
//重写Object的equals方法
public boolean equals(Object obj) {
//判断如果比较的两个对象是同一个对象则直接返回true
if(this == obj){
return true;
}
//类型判断
if(obj instanceof Person){
//类型转换,向下转型,因为需要得到obj的各个属性
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
}
//如果类型不是Person,则直接返回false
return false;
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
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 char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}



HashCode.java
package com.hspedu.object_;
public class HashCode {
public static void main(String[] args) {
AA aa1 = new AA();
AA aa2 = new AA();
AA aa3 = aa1;
System.out.println("aa1.hashCode=" + aa1.hashCode());
System.out.println("aa2.hashCode=" +aa2.hashCode());
System.out.println("aa3.hashCode=" +aa3.hashCode());
}
}
class AA{
}

ToString.java
package com.hspedu.object_;
public class ToString {
public static void main(String[] args) {
//Object的 toString()源码
//1.getClass().getName()类的全类名(包名+类名)
//2.Interger.toHexString(HashCode())将对象的hashCode值转成16进制字符串
// public String toString() {
// return getClass().getName() + "@" + Integer.toHexString(hashCode());
// }
Monster monster = new Monster("小妖怪", "巡山", 1000);
System.out.println(monster.toString() + " hachCode=" + monster.hashCode());
//com.hspedu.object_.Monster@1540e19d hachCode=356573597
//如下重写toString方法,输出结果为:Monster{name='小妖怪', job='巡山', salary=1000.0} hachCode=356573597
//当直接输出一个对象时,toString方法会被默认调用
System.out.println(monster);//Monster{name='小妖怪', job='巡山', salary=1000.0}
}
}
class Monster{
private String name;
private String job;
private double salary;
public Monster(String name, String job, double salary) {
this.name = name;
this.job = job;
this.salary = salary;
}
//重写toString方法,输出对象的属性
@Override
public String toString() {//重写后,一般是把对象的属性输出,也可以自己定制
return "Monster{" +
"name='" + name + '\'' +
", job='" + job + '\'' +
", salary=" + salary +
'}';
}
}

Finalize.java
package com.hspedu.object_;
//演示 Finalize的用法
public class Finalize {
public static void main(String[] args) {
Car bmw = new Car("宝马");
bmw = null;//这时Car对象就是一个垃圾,垃圾回收器就会回收(销毁)对象,在销毁对象前,会调用该对象的Finalize方法,可以在finalize中,写业务逻辑代码(比如释放资源:数据库连接,或者打开的文件...),吐过不重写finalize,那么就会调用Object类的finalize,即默认处理,如果重写了finalize,就可以实现自己的逻辑
//bmw.finalize();
System.gc();//主动调用垃圾回收器
System.out.println("程序退出了...");
}
}
class Car{
private String name;
public Car(String name) {
this.name = name;
}
//重写finalize
@Override
protected void finalize() throws Throwable {
System.out.println("我们销毁汽车" + name);
System.out.println("释放了某些资源...");
}
}




Debug01.java
package com.hspedu.debug_;
public class Debug01 {
public static void main(String[] args) {
//演示逐行执行代码
int sum = 0;
for(int i = 0;i < 5;i++){
sum += i;
System.out.println("i=" + i);
System.out.println("sum=" + i);
}
System.out.println("退出for...");
}
}

Debug02.java
package com.hspedu.debug_;
public class Debug02 {
public static void main(String[] args) {
int[] arr = {1,10,-1};
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("退出 for...");
}
}


Debug03.java
package com.hspedu.debug_;
import java.util.Arrays;
public class Debug03 {
public static void main(String[] args) {
//debug源码
int[] arr = {8,-1,199,70,10};
//程序,追入sort的源码,Arrays.sort方法底层实现debug
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}

Debug04.java
package com.hspedu.debug_;
import java.util.Arrays;
//演示执行到下一个断点,同时支持动态的下断点
public class Debug04 {
public static void main(String[] args) {
//debug源码
int[] arr = {8,-1,199,70,10};
//程序,追入sort的源码,Arrays.sort方法底层实现debug
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
System.out.println("hello100");
System.out.println("hello200");
System.out.println("hello300");
System.out.println("hello400");
System.out.println("hello500");
System.out.println("hello600");
System.out.println("hello700");
}
}

DebugExercise.java
package com.hspedu.debug_;
//演示debug对象创建的过程,加深对调试的理解
public class DebugExercise {
public static void main(String[] args) {
//创建对象的流程
//1.加载Person信息
//2.初始化->默认初始化->显示初始化->构造器初始化
//3.返回对象的地址
Person jack = new Person("jack", 20);
System.out.println(jack);
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

DebugExercise.java
package com.hspedu.Debud_;
public class DebugExercise {
public static void main(String[] args) {
//a的编译类型A,运行类型B
A a = new B();//向上转型
System.out.println(a.sum());//30
System.out.println(a.sum1());//20
}
}
class A{
public int i = 10;
//动态绑定机制:
//1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
public int sum(){
return getl() + 10;
}
//2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用
public int sum1(){
return i + 10;
}
public int getl(){//父类getI
return i;
}
}
class B extends A{
public int i = 20;
// public int sum(){
// return i + 20;
// }
public int getl(){//子类getI()
return i;
}
// public int sum1(){
// return i + 10;
// }
}



SmallChangeAys.java(面向过程版本)
package com.hspedu.smallchange;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.logging.SimpleFormatter;
public class SmallChangeAys {
//化繁为简
//1.先完成显示菜单,并可以选择菜单,给出对应提示
//2.完成零钱通明细
//3.完成收益入账
//4.消费
//5.退出
//6.用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或n
//7.在收益入账和消费时,判断金额是否合理,并给出相应的提示
public static void main(String[] args) {
//定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key = "";
//2.完成零钱通明细
//解决方法有三种:
//(1)可以把收益入账和消费,保存到数组
//(2)可以使用对象
//(3)简单的话可以使用String拼接
String detail = "---------------零钱通明细------------------";
//3.完成收益入账
//定义新的变量(完成功能驱动程序猿增加新的变化和代码)
double money = 0;
double balance = 0;
Date date = null;//date是java.util.Date类型,表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的对象
//4.消费
//定义新变量,保存消费的原因
String note = "";
do{
System.out.println("\n=======零钱通菜单=======");
System.out.println("\t\t\t\t1 零钱通明细");
System.out.println("\t\t\t\t2 收益入账");
System.out.println("\t\t\t\t3 消费");
System.out.println("\t\t\t\t4 退 出");
System.out.print("请选择(1-4):");
key = scanner.next();
//使用switch分支
switch(key){
case "1" :
System.out.println(detail);
break;
case "2" :
System.out.print("收益入账金额:");
money = scanner.nextDouble();
//money的范围应该校验
//7.在收益入账时,判断金额是否合理,并给出相应的提示
//思路:找出不正确的金额条件,给出提示,直接break
if(money <= 0){
System.out.println("收益入账金额需要大于0");
break;
}
balance += money;
//拼接收益入账信息到detail
date = new Date();//获取当前日期
detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "3" :
System.out.print("消费金额:");
money = scanner.nextDouble();
//money的范围应该校验
//7.在消费时,判断金额是否合理,并给出相应的提示
//思路:找出不正确的金额条件,给出提示,直接break
//过关斩将校验法
if(money <= 0 || money > balance){
System.out.println("您的消费金额应该在 0 ~ " + balance);
break;
}
System.out.print("消费说明:");
note = scanner.next();
balance -= money;
//拼接消费信息到detail
date = new Date();//获取当前日期
detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
break;
case "4" :
//5.退出
//6.用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或n
//(1)定义一个变量choice,接收用户的输入
//(2)使用while+break,来处理接收到的输入是y或者n
//(3)退出while后,判断choice是y还是n,就可以决定是否退出
//(4)一般代码完成一个小功能,尽量不要混在一起
String choice = "";
while(true){//要求用户必须输入y/n,否则就一直循坏
System.out.println("你确定要退出吗?y/n");
choice = scanner.next();
if("y".equals(choice) || "n".equals(choice)){
break;
}
/*
* if("y".equal(choice)){
* loop = false;
* break;
* }else if("n".equals(choice)){
* break;
* }
*/
}
//当用户退出while,进行判断
if(choice.equals("y")){
loop = false;
}
break;
default:
System.out.println("选择有误,请重新选择");
}
}while(loop);
System.out.println("------退出了零钱通项目-------");
}
}
SmallChangeAysOOP.java(面向对象版本)
package com.hspedu.smallchange.oop;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
* 该类是完成零钱通的各个功能的类
* 使用OOP(面向对象编程)
* 将各个功能对应一个方法
* */
public class SmallChangeSysOOP {
//1.定义相关的变量
boolean loop = true;
Scanner scanner = new Scanner(System.in);
String key = "";
//2.完成零钱通明细
//解决方法有三种:
//(1)可以把收益入账和消费,保存到数组
//(2)可以使用对象
//(3)简单的话可以使用String拼接
String detail = "---------------零钱通明细------------------";
//3.完成收益入账
//定义新的变量(完成功能驱动程序猿增加新的变化和代码)
double money = 0;
double balance = 0;
Date date = null;//date是java.util.Date类型,表示日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化的对象
//4.消费
//定义新变量,保存消费的原因
String note = "";
//1.先完成显示菜单,并可以选择
public void mainMenu(){
do{
System.out.println("\n=======OOP零钱通菜单=======");
System.out.println("\t\t\t\t1 零钱通明细");
System.out.println("\t\t\t\t2 收益入账");
System.out.println("\t\t\t\t3 消费");
System.out.println("\t\t\t\t4 退 出");
System.out.print("请选择(1-4):");
key = scanner.next();
//使用switch分支
switch(key){
case "1" :
this.detail();
break;
case "2" :
this.income();
break;
case "3" :
this.pay();
break;
case "4" :
this.exit();
break;
default:
System.out.println("选择有误,请重新选择");
}
}while(loop);
}
//2.完成零钱通明细
public void detail(){
System.out.println(detail);
}
//3.完成收益入账
public void income(){
System.out.print("收益入账金额:");
money = scanner.nextDouble();
//money的范围应该校验
//7.在收益入账时,判断金额是否合理,并给出相应的提示
//思路:找出不正确的金额条件,给出提示,直接return
if(money <= 0){
System.out.println("收益入账金额需要大于0");
return;//退出方法不再执行后面的代码。
}
balance += money;
//拼接收益入账信息到detail
date = new Date();//获取当前日期
detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
}
//4.完成消费
public void pay(){
System.out.print("消费金额:");
money = scanner.nextDouble();
//money的范围应该校验
//7.在消费时,判断金额是否合理,并给出相应的提示
//思路:找出不正确的金额条件,给出提示,直接return
//过关斩将校验法
if(money <= 0 || money > balance){
System.out.println("您的消费金额应该在 0 ~ " + balance);
return;
}
System.out.print("消费说明:");
note = scanner.next();
balance -= money;
//拼接消费信息到detail
date = new Date();//获取当前日期
detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
}
//5.退出
public void exit(){
//5.退出
//6.用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或n
//(1)定义一个变量choice,接收用户的输入
//(2)使用while+break,来处理接收到的输入是y或者n
//(3)退出while后,判断choice是y还是n,就可以决定是否退出
//(4)一般代码完成一个小功能,尽量不要混在一起
String choice = "";
while(true){//要求用户必须输入y/n,否则就一直循坏
System.out.println("你确定要退出吗?y/n");
choice = scanner.next();
if("y".equals(choice) || "n".equals(choice)){
break;
}
/*
* if("y".equal(choice)){
* loop = false;
* break;
* }else if("n".equals(choice)){
* break;
* }
*/
}
//当用户退出while,进行判断
if(choice.equals("y")){
loop = false;
}
}
}
SmallChangeSysApp.java
package com.hspedu.smallchange.oop;
/*
* 这里直接调用SmallChangeSysOOP 对象,显示主菜单即可
* */
public class SmallChangeSysApp {
public static void main(String[] args) {
new SmallChangeSysOOP().mainMenu();
}
}

Person.java
package com.hspedu.homework.homework01;
public class Person {
private String name;
private int age;
private String job;
public Person(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
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 getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", job='" + job + '\'' +
'}';
}
}
Homework01.java
package com.hspedu.homework.homework01;
public class Homework01 {
public static void main(String[] args) {
Person[] persons = new Person[3];
persons[0] = new Person("jack", 18, "docter");
persons[1] = new Person("tom", 33, "sporter");
persons[2] = new Person("mary", 25, "tercher");
//输出当前对象的对象数组
for(int i = 0;i < persons.length;i++){
System.out.println(persons[i]);
}
//冒泡排序
Person tmp = null;
for(int i = 0;i < persons.length - 1;i++){//外层循环
for(int j = 0;j < persons.length -1 -i;j++){//内层循环
//1.并按照age从大到小进行排序,如果前面的age小于后面就交换
//2.并按照age从小到大进行排序,如果前面的age小于后面就交换(if条件里的<更改为>即可)
//3.要求按照名字的长度从小到大排序,比较条件为persons[i].getName().length() > persons[i+1].getName().length()
if(persons[j].getAge() < persons[j+1].getAge()){
tmp = persons[j];
persons[j] = persons[j+1];
persons[j+1] = tmp;
}
}
}
System.out.println("===============");
//输出排序后对象的对象数组
for(int i = 0;i < persons.length;i++){
System.out.println(persons[i]);
}
}
}

homework.java
package com.hspedu.homework.homework03;
public class Homework03 {
public static void main(String[] args) {
Teacher Professor = new Professor("mary",22,"教授",5100.0,1.3);
Professor.introduce();
}
}
Teacher.java
package com.hspedu.homework.homework03;
public class Teacher {
private String name;
private int age;
private String post;
private double salary;
//增加一个工资级别
private double grade;
public Teacher(String name, int age, String post, double salary, double grade) {
this.name = name;
this.age = age;
this.post = post;
this.salary = salary;
this.grade = grade;
}
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 getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
public void introduce(){
System.out.println("老师姓名是" + name + ",年龄" + age + ",职称" + post + ",工资是" + salary * grade);
}
}
Professor.java
package com.hspedu.homework.homework03;
public class Professor extends Teacher{
public Professor(String name, int age, String post, double salary, double grade) {
super(name, age, post, salary, grade);
}
public void introduce(){
System.out.println("这是教授的信息");
super.introduce();
}
}
AssProfess.java
package com.hspedu.homework.homework03;
public class AssProfessor extends Teacher{
public AssProfessor(String name, int age, String post, double salary, double grade) {
super(name, age, post, salary, grade);
}
public void introduce(){
System.out.println("这是副教授的信息");
super.introduce();
}
}
Lecturer.java
package com.hspedu.homework.homework03;
public class Lecturer extends Teacher{
public Lecturer(String name, int age, String post, double salary, double grade) {
super(name, age, post, salary, grade);
}
public void introduce(){
System.out.println("这是讲师的信息");
super.introduce();
}
}

Worker.java
package com.hspedu.homework.homework04;
public class Worker {
private String name;
private double salary;
private int days;
private double grade;
public Worker(String name, double salary, int days, double grade) {
this.name = name;
this.salary = salary;
this.days = days;
this.grade = grade;
}
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 int getDays() {
return days;
}
public void setDays(int days) {
this.days = days;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
public void getSal(){
System.out.println("姓名" + name + ",工资=" + salary * days *grade);
}
}
Genworker.java
package com.hspedu.homework.homework04;
public class GenWorker extends Worker{
public GenWorker(String name, double salary, int days, double grade) {
super(name, salary, days, grade);
}
//重写父类的getSal方法
public void getSal(){
//因为经理的计算方式和worker一样,所以直接调用父类
System.out.print("普通员工");
super.getSal();
}
}
Manager.java
package com.hspedu.homework.homework04;
public class Manager extends Worker{
//特有属性:奖金
private double bonus;
//创建Manager对象时,奖金是多少并不是确定的,因此在构造器中,不给bonus
public Manager(String name, double salary, int days, double grade) {
super(name, salary, days, grade);
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
//重写父类的getSal方法
public void getSal(){
//因为经理的计算方式和worker不一样,所以重写
System.out.println("经理" + getName() + ",工资=" + (bonus + getDays() * getSalary() * getGrade()));
}
}
Homework04.java
package com.hspedu.homework.homework04;
public class Homework04 {
public static void main(String[] args) {
Manager jack = new Manager("jack", 100, 20, 1.2);
//设置奖金
jack.setBonus(3000);
jack.getSal();
GenWorker daben = new GenWorker("daben", 50, 30, 1.0);
daben.getSal();
}
}

Employee.java
package com.hspedu.homework.homework05;
public class Employee {
//属性
//分析有一个带薪对的月份13,15,12
private String name;
private double salary;
private int salMonth = 12;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
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 int getSalMonth() {
return salMonth;
}
public void setSalMonth(int salMonth) {
this.salMonth = salMonth;
}
//方法
//打印全年工资
public void printSal(){
System.out.println(name + "年工资=" + (salary * salMonth));
}
}
Worker.java
package com.hspedu.homework.homework05;
public class Worker extends Employee{
public Worker(String name, double salary) {
super(name, salary);
}
public void printSal(){
System.out.print("工人:");
super.printSal();//使用了父类的printSal方法
}
}
Peasant.java
package com.hspedu.homework.homework05;
public class Peasant extends Employee{
public Peasant(String name, double salary) {
super(name, salary);
}
public void printSal(){
System.out.print("农民:");
super.printSal();
}
}
Waiter.java
package com.hspedu.homework.homework05;
public class Waiter extends Employee{
public Waiter(String name, double salary) {
super(name, salary);
}
public void printSal(){
System.out.print("服务员:");
super.printSal();
}
}
Teacher.java
package com.hspedu.homework.homework05;
public class Teacher extends Employee{
private double ClassSal;
private int days;
public Teacher(String name, double salary) {
super(name, salary);
}
public double getClassSal() {
return ClassSal;
}
public void setClassSal(double classSal) {
ClassSal = classSal;
}
public int getDays() {
return days;
}
public void setDays(int days) {
this.days = days;
}
public void printSal(){
System.out.print("老师:");
System.out.println(getName() + "工资=" + (getSalary() * getSalMonth() + ClassSal * days));
}
}
Scientist.java
package com.hspedu.homework.homework05;
public class Scientist extends Employee{
private double bone;
public Scientist(String name, double salary) {
super(name, salary);
}
public double getBone() {
return bone;
}
public void setBone(double bone) {
this.bone = bone;
}
public void printSal(){
System.out.print("科学家:");
System.out.println(getName() + "工资=" + (getSalary() * getSalMonth() + bone));
}
}
Homework05.java
package com.hspedu.homework.homework05;
public class Homework05 {
public static void main(String[] args) {
//农民:
Peasant peasant = new Peasant("马杰克", 3000);
peasant.setSalMonth(10);
peasant.printSal();
//服务员:
Waiter waiter = new Waiter("其可", 6000);
waiter.printSal();
//工人:
Worker worker = new Worker("刘昊然", 9000);
worker.printSal();
//IT老师:
Teacher teacher = new Teacher("郭勇", 75000);
teacher.setDays(360);
teacher.setClassSal(1000);
teacher.printSal();
//科学家:
Scientist scientist = new Scientist("邓佳佳", 30000);
scientist.setBone(2000000);
scientist.printSal();
}
}


package com.hspedu.homework.homework07;
public class Homework07 {
}
class Test{
String name = "Rose";
Test(){
System.out.println("Test");
}
Test(String name){
this.name = name;//把父类的name=Rose修改name=john
}
}
class Demo extends Test{
String name = "Jack";
Demo(){
super();
System.out.println("Demo");
}
Demo(String s){
super(s);
}
public void test(){
System.out.println(super.name);
System.out.println(this.name);
}
public static void main (String[] args){
new Demo().test();//匿名对象
new Demo("john").test();//匿名对象
}
/*
Test
Demo
Rose
Jack
john
Jack
* */
}

BankAccount.java
package com.hspedu.homework.homework08;
class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
//存款
public void deposit(double amount) {
balance += amount;
}
//取款
public void withdraw(double amount) {
balance -= amount;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
SavingsAccount.java
package com.hspedu.homework.homework08;
public class SavingsAccount extends BankAccount{
//扩展前一个练习的BankAccount类
//新类SavingsAccount每个月都有利息产生(earnMonthlyInterest方法被调用)
//并且有每月三次免手续费的存款或者取款。在earnMonthlyInterest方法中重置交易计数
//新增加属性
private int count = 3;
private double rate = 0.01;//利率
public void earnMonthlyInterest(){//每个月初,统计上个月的利息,同时将count = 3
count = 3;
super.deposit(getBalance() * rate);
}
public SavingsAccount(double initialBalance) {
super(initialBalance);
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
@Override
public void deposit(double amount) {
//判断是否还可以免手续费
if(count > 0){
super.deposit(amount);
}else{
super.deposit(amount - 1);
}
count--;//减去一次
}
@Override
public void withdraw(double amount) {
if(count > 0){
super.withdraw(amount);
}else{
super.withdraw(amount + 1);
}
count--;
}
}
CheckingAccount.java
package com.hspedu.homework.homework08;
public class CheckingAccount extends BankAccount{
public CheckingAccount(double initialBalance) {
super(initialBalance);
}
@Override
public void deposit(double amount) {//存款
super.deposit(amount - 1);//巧妙使用父类的deposit
//1块钱转入银行的账号
}
@Override
public void withdraw(double amount) {//存款
super.withdraw(amount + 1);
//1块钱转入银行的账号
}
}
Homework08.java
package com.hspedu.homework.homework08;
public class Homework08 {
public static void main(String[] args) {
// CheckingAccount checkingAccount = new CheckingAccount(1000);
// checkingAccount.deposit(10);
// System.out.println(checkingAccount.getBalance());//1009.0
// checkingAccount.withdraw(9);
// System.out.println(checkingAccount.getBalance());//999.0
//测试SavingAccount
SavingsAccount savingsAccount = new SavingsAccount(1000);
savingsAccount.deposit(100);//免手续费
savingsAccount.deposit(100);//免手续费
savingsAccount.deposit(100);//免手续费
System.out.println(savingsAccount.getBalance());//1300.0
savingsAccount.deposit(100);
System.out.println(savingsAccount.getBalance());//1399.0
//月初,定时器自动调用一下 earnMonthlyInterest
savingsAccount.earnMonthlyInterest();
System.out.println(savingsAccount.getBalance());//1399+13.99=1412.99
savingsAccount.withdraw(100);//免手续费
System.out.println(savingsAccount.getBalance());//1412.99-100=1312.99
savingsAccount.withdraw(100);//免手续费
savingsAccount.withdraw(100);//免手续费
System.out.println(savingsAccount.getBalance());//1412.99-200=1112.99
savingsAccount.deposit(100);//扣手续费
System.out.println(savingsAccount.getBalance());//1112.99+100-1=1211.99
}
}

Homework09.java
package com.hspedu.homework;
public class Homework09 {
public static void main(String[] args) {
LabelPoint haha = new LabelPoint("haha", 232, 323.3);
}
}
class Point{
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
class LabelPoint extends Point{
private String label;
public LabelPoint(String label,double x, double y) {
super(x, y);
this.label = label;
}
}
Homework10.java
package com.hspedu.homework.homework10;
public class Homework10 {
public static void main(String[] args) {
Doctor doctor1 = new Doctor("jack", 20, "牙科医生", '男', 20000);
Doctor doctor2 = new Doctor("jack", 22, "牙科医生", '男', 20000);
System.out.println(doctor1.equals(doctor2));
}
}
Doctor.java
package com.hspedu.homework.homework10;
public class Doctor {
private String name;
private int age;
private String job;
private char gender;
private double sal;
public Doctor(String name, int age, String job, char gender, double sal) {
this.name = name;
this.age = age;
this.job = job;
this.gender = gender;
this.sal = sal;
}
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 getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public boolean equals(Object obj){
//判断两个比较对象是否相同
if(this == obj){
return true;
}
//判断object是否是Doctor类型或者是其子类
if(!(obj instanceof Doctor)){
return false;
}
//向下转型,因为obj的运行类型是Doctor或者其子类型
Doctor doctor = (Doctor)obj;
return this.name.equals(doctor.name) && this.age == doctor.age && this.gender == doctor.gender && this.job.equals(doctor.job) && this.sal == doctor.sal;
}
}



Person.java
package com.hspedu.homework.homework13;
public class Person {
private String name;
private int age;
private char sex;
public Person(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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 char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String play(){
return name + "爱玩";
}
public String basic() {
return "姓名:" + name + "\n年龄:" + age + "\n性别:" + sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}
Teacher.java
package com.hspedu.homework.homework13;
import java.sql.SQLOutput;
public class Teacher extends Person{
private int work_age;
public Teacher(String name, int age, char sex, int work_age) {
super(name, age, sex);
this.work_age = work_age;
}
public int getWork_age() {
return work_age;
}
public void setWork_age(int work_age) {
this.work_age = work_age;
}
public void teach(){
System.out.println(getName() + "承诺,我会认真教学。");
}
@Override
public String play() {
return super.play() + "象棋";
}
public void printInfo() {
System.out.println("老师的信息如下:");
System.out.println(super.basic());
System.out.println("工龄:" + work_age);
teach();
System.out.println(play());
}
@Override
public String toString() {
return "Teacher{" +
"work_age=" + work_age +
'}' + super.toString();
}
}
Student.java
package com.hspedu.homework.homework13;
public class Student extends Person{
private String stu_id;
public Student(String name, int age, char sex, String stu_id) {
super(name, age, sex);
this.stu_id = stu_id;
}
public void study(){
System.out.println(getName() + "承诺,我会好好学习。");
}
public String getStu_id() {
return stu_id;
}
public void setStu_id(String stu_id) {
this.stu_id = stu_id;
}
@Override
public String play() {
return super.play() + "足球";
}
public void printInfo() {
System.out.println("学生的信息如下:");
System.out.println(super.basic());
System.out.println("学号:" + getStu_id());
study();
System.out.println(play());
}
@Override
public String toString() {
return "Student{" +
"stu_id='" + stu_id + '\'' +
'}' + super.toString();
}
}
Homework13.java
package com.hspedu.homework.homework13;
public class Homework13 {
public static void main(String[] args) {
// Teacher teacher = new Teacher("张飞",30,'男',5);
// teacher.printInfo();
// Student student = new Student("小明", 15, '男', "00023102");
// System.out.println("----------");
// student.printInfo();
//定义多态数组,里面保存2个学生和2个教师,要求按照年龄从高到低排序
Person[] persons = new Person[4];
persons[0] = new Student("小明",10,'男',"00023102");
persons[1] = new Student("小钱",20,'女',"00023881");
persons[2] = new Teacher("老孙",36,'男',10);
persons[3] = new Teacher("老李",26,'女',18);
//创建对象
Homework13 homework13 = new Homework13();
homework13.bubbleSort(persons);
//输出排序后的数组
System.out.println("------排序后的数组---------");
for (int i = 0; i < persons.length; i++) {
System.out.println(persons[i]);
}
//遍历数组调用test方法
System.out.println("===============");
for (int i = 0; i < persons.length; i++) {
homework13.test(persons[i]);
}
}
//方法排序后的数组
public void bubbleSort(Person[] persons){
Person tmp = null;
for(int i = 0;i < persons.length - 1;i++){
for(int j = 0;j < persons.length - 1 - i ;j++){
//判断条件,注意这里的条件可以根据需要变化
if(persons[j].getAge() < persons[j+1].getAge()){
tmp = persons[j];
persons[j] = persons[j+1];
persons[j+1] = tmp;
}
}
}
}
//定义方法,形参为Person类型,功能:调用学生的study或教师的teach方法
public void test(Person p){
if(p instanceof Student){//p的 运行类型如果是Student
((Student) p).study();
}else if(p instanceof Teacher){
((Teacher) p).teach();
}else{
System.out.println("do nothing");
}
}
}

我是A类 hahah我是B类的有参构造 我是C类的有参构造 我是c类的无参构造

Homework15.java
package com.hspedu.homework;
public class Homework15 {
public static void main(String[] args) {
AAA obj =new BBB(); //向上转型
AAA b1 = obj;
System.out.println("obj的运行类型=" + obj.getClass());//BBB
obj = new CCC();//向上转型
System.out.println("obj的运行类型=" + obj.getClass());//CCC
obj = b1;
System.out.println("obj的运行类型=" + obj.getClass());//BBB
}
}
class AAA{
}
class BBB extends AAA{
}
class CCC extends BBB {
}
MySQL学习笔记