笔记(课5)

一阶段:第5天:多态(7.29)

一.常用方法

1.1 equals()方法

"=="操作符与equals方法的区别:
1 "=="  比较基本类型比较的是数据 ,引用类型比较对象的引用(地址)
2 默认情况Object中equals和"=="一样
3 String类型重写了Object中的equals,所以String比较使用equals方法。

1.2 hashCode()方法

返回该对象的哈希码值(理解为对象的地址)。每一个对象的哈希码值唯一
System.identityHashCode(stu1);//调用重写之前的hashCode()

    Object obj1 = new Object();
	Object obj2 = new Object();
	Object obj3 = obj2;
	//obj2与obj3两个对象的哈希码值一样
	System.out.println(obj1.hashCode());
	System.out.println(obj2.hashCode());
	System.out.println(obj3.hashCode());

1.3 getClass()方法

返回此Object的运行时类。获取某个类的类对象。

    Object obj = new Object();
	Class cls = obj.getClass();//通过反射获取到了Object类

1.4 toString()方法

返回该对象的字符串表示。可以在自定义类中重写toString方法,以实现是对象转成指定格式的字符串。

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }

二.常用关键字

2.1 instanceof关键字

我们可以通过instanceof关键字判断引用指向的实例是否可以进行强制转换成某个子类对象

 if (pet instanceof Dog) {//如果pet是Dog类型
            Dog dog = (Dog) pet;
            dog.playBall();
        }

2.2 final关键字

在Java中声明属性方法时,可以使用关键字final来修饰。

  1. final修饰成员变量或局部变量,则成为(符号)常量,只能赋值一次,用大写字母表示。作用:提高程序执行效率
     (1)修饰成员变量时,定义时同时给出初始值,或在构造方法中赋值
     (2)修饰局部变量时,只能赋值一次
  2. final修饰方法,则该方法不能被子类重写,能被继承
  3. final修饰类,则类不能被继承

三.多态

  1. 多态:同一个父类引用类型,使用不同的子类实例而执行不同操作 ,一句话理解:父类变量,子类对象。
  2. 多态实现步骤
     (1) 编写父类、子类,子类重写父类方法。
     (2) 运行时,使用父类变量,子类的对象。(编译时看父类,运行时看子类)
  3. 多态使用形式
     (1) 使用父类作为方法形参实现多态
     (2) 使用父类作为方法返回值实现多态
  4. 向上转型、向下转型
     (1) 向上转型:父类表示的数据范围比子类要大,所以子类对象可以自动向上转型成父类
      a. <父类型> <引用变量名> = new <子类型>();
      b. 此时通过父类引用变量调用的方法是子类重写或父类的方法,编译时看父类,运行时看子类
      c. 此时通过父类引用变量无法调用子类特有的属性和方法
     (2) 向下转型:子类创建变量,赋值的是父类的对象,在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常ClassCastException
       向下转型有一个前提:必须先向上转型,才能向下转型
Pet p=new Dog();//向上转型
Dog d=(Dog) p;//向下转型

四.综合实例-电话本

public class StartMenu {
    public static void main(String[] args) {
        System.out.println("---------欢迎使用电话本管理系统v1.0---------");
        PhoneBook phoneBook=new PhoneBook();
        Scanner input=new Scanner(System.in);
        mm:do {
            System.out.println("-------1.添加联系人------");
            System.out.println("-------2.查找联系人------");
            System.out.println("-------3.查看所有联系人---");
            System.out.println("-------4.修改联系人------");
            System.out.println("-------5.删除联系人------");
            System.out.println("-------6.退出系统--------");
            System.out.println("请选择:");
            int choice=input.nextInt();
            switch (choice){
                case 1:
                    Linkman linkman=inputLinkman();
                    phoneBook.addLinkman(linkman);
                    break;
                case 2:
                    System.out.println("请输入您要查找人的姓名");
                    String name=input.next();
                    phoneBook.searchByName(name);
                    break;
                case 3:
                    phoneBook.findAll();
                    break;
                case 4:
                    System.out.println("请输入要修改联系人的id");
                    int id=input.nextInt();
                    Linkman linkman1=phoneBook.modify(id);
                    System.out.println("请输入新的姓名");
                    String newname=input.next();
                    System.out.println("请输入新的电话");
                    String phone=input.next();
                    linkman1.setName(newname);
                    linkman1.setPhone(phone);
                    break;
                case 5:
                    System.out.println("请输入要删除的联系人的id");
                    int id2=input.nextInt();
                    phoneBook.delete(id2);
                    break;
                case 6:
                    break mm;
                default:
                    System.out.println("输入有误,请重新输入");
            }
        } while (true);
        System.out.println("谢谢使用");
    }
    public static Linkman inputLinkman(){
        Scanner input=new Scanner(System.in);
        System.out.println("请输入姓名:");
        String name=input.next();
        System.out.println("请输入性别");
        String gender=input.next();
        System.out.println("请输入年龄");
        int age=input.nextInt();
        System.out.println("请输入电话号码");
        String phone=input.next();
        System.out.println("请输入身份证号");
        String identity=input.next();
        Linkman linkman=new Linkman(name,gender,age,phone,identity);
        return linkman;
    }
}


public class PhoneBook {
    //电话本联系人数组固定200
    private Linkman[] linkmans=new Linkman[200];
    private int count=0;//联系人实际个数
    //1.新增联系人
    public void addLinkman(Linkman linkman){
        if (count>=200){
            System.out.println("对不起,电话本已满");
            return;
        }
        linkmans[count]=linkman;
        count++;
    }
    //2.查找符合条件的所有联系人
    public void searchByName(String name){
        System.out.println("查找结果:");
        int temp=0;
        for (Linkman linkman : linkmans) {
            if (linkman!=null){
                if (linkman.getName().equals(name)){
                    temp++;
                    System.out.println(linkman.toString());
                }
            }else {
                break;
            }
        }
        if (temp==0){
            System.out.println("该联系人不存在");
        }
    }
    //3.查找所有联系人
    public void findAll(){
        System.out.println("联系人信息");
        for (Linkman linkman : linkmans) {
            if (linkman!=null){
                    System.out.println(linkman.toString());
            }else {
                break;
            }
        }
    }
    //4.选择一个联系人修改信息
    public Linkman modify(int id){
        for (Linkman linkman : linkmans) {
            if (linkman!=null){
                if (linkman.getId()==id){
                    return linkman;
                }
            }else {
                break;
            }
        }
        return null;
    }
    //5.删除---根据编号删除
    public void delete(int id){
        //查找要删除的元素的下标
        int index=-1;
        for (int i = 0; i < count; i++) {
            if (linkmans[i].getId()==id){
                index=i;
                break;
            }
        }
        if (index!=-1){
            for (int i = index; i < count-1; i++) {
                linkmans[i]=linkmans[i+1];
            }
            linkmans[count-1]=null;
            System.out.println("删除成功...");
            count--;//把联系人减少一个
        }else {
            System.out.println("要删除的联系人不存在");
        }
    }
}


public class Linkman {
    private int id;
    private String name;
    private String gender;
    private  int age;
    private String phone;
    private String idcard;
    private static int count=1;
    public Linkman() {
        this.id=count;
        count++;
    }
    public Linkman(String name, String gender, int age, String phone, String idcard) {
        this.id=count;
        count++;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.phone = phone;
        this.idcard = idcard;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    public static int getCount() {
        return count;
    }
    public static void setCount(int count) {
        Linkman.count = count;
    }
    @Override
    public String toString() {
        return "Linkman{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                ", idcard='" + idcard + '\'' +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值