【Java】匿名对象 , 继承 , 抽象类(一)

简介: 【Java】匿名对象 , 继承 , 抽象类

主要内容


  • 面向对象回顾
  • 匿名对象介绍
  • 面向对象特征 - 继承
  • 抽象类的使用
  • 模板设计模式

1 面向对象回顾


  • 面向对象的核心思想是什么 ?
  • 用代码来模拟现实生活中的事物 , 比如学生类表示学生事物 , 对象表示的就是具体的学生 , 有了类就可以描述万千世界所有的事物了
  • 现有的类还是先有的对象 ?
  • 对象是根据类创建出来的 , 所有现有的类 , 再有对象
  • Java类的创建 ?
  • 类名建议使用大驼峰命名法 , 每个单词首字母需要大写
  • Java规定 , 一个Java文件中可以定义多个类 , 但是只能有一个类使用public修饰 , public修饰的类名需要和java文件名保持一致
  • 按照规范 , 实际工作之时 , 建议一个Java文件中只能有一个类
类中的组成成分 ?
  • 1 成员变量
  • 2 成员方法
  • 3 构造方法
  • 4 内部类(后面学)
  • 5 代码块(后面学)
  • image.png
  • 创建对象所使用的关键字 ?
  • new关键字
  • 创建对象的格式 ?
  • 类名 对象名 = new 类名(参数列表);
  • 调用对象的成员 ?
  • 调用成员变量 : 对象名.成员变量名
  • 调用成员方法 : 对象名.成员方法名(参数)
  • 定义构造方法的格式 ?
  • 修饰符 类名(参数){ … }
  • 定义构造方法的特点 ?
  • 没有返回值 , 连void都没有
  • 方法名与类名相同
  • 构造方法可以进行重载定义
  • 构造方法的作用 ?
  • 空参构造 : 初始化对象的数据为默认值
  • 有参构造 : 初始化对象时 , 为对象的属性赋值
  • 面向对象三大特征是什么 ?
  • 封装 , 继承 , 多态
  • 封装的思想及其作用 ?
  • 思想 : 把实现细节隐藏 , 对外提供公共的访问方式
  • 作用 : 提高代码的安全性 , 提高代码的复用性
  • 封装的步骤 ?
  • 把成员变量进行private修饰
  • 提供对应的setter和getter方法
  • this关键字的含义 ?
  • this代表的是本类对象的引用
  • 在构造方法中 , this代表的是new的对象
  • 在成员方法中 , this代表的是调用此方法的对象
  • this关键字的作用 ?
  • 主要用于区分局部变量和成员变量同名的问题

2 匿名对象介绍


  • 什么是匿名对象 ?
  • 没有变量接收的对象 , 称作为匿名对象
  • 匿名对象的使用 ?
  • 直接使用匿名对象调用方法
  • 匿名对象作为方法传参
  • 匿名对象作为方法的返回值
  • 代码实现
package com.itheima.anonymous;
/*
    匿名对象 :
        没有对象名接收的对象 , 称作为匿名对象
        有对象名接收的对象 , 称作有名对象
    注意 : 一般使用一次的对象 , 我们可以采用匿名对象
    匿名对象的使用 :
        1 使用匿名对象直接调用方法
        2 使用匿名对象作为方法的传参
        3 使用匿名对象作为方法的返回值
 */
public class Demo1 {
    public static void main(String[] args) {
//        Student s = new Student();
//        s.study();
//        1 使用匿名对象直接调用方法
        new Student().study();
//        Student s2 = new Student();
//        useStudent(s2);
//        2 使用匿名对象作为方法的传参
        useStudent(new Student());
    }
    public static void useStudent(Student s) {
        s.study();
    }
    public static Student getStudent() {
//        Student s = new Student();
//        return s;
        // 3 使用匿名对象作为方法的返回值
        return new Student();
    }
}
class Student {
    public void study() {
        System.out.println("学生学习...");
    }
}
代码实践:注册案例
package com.itheima.anonymous;
import java.util.ArrayList;
import java.util.Scanner;
/*
    需求 :
        1 创建用户(User)对象 , 对象数据采用键盘录入而来
        2 用户(User)包含的属性 :
            用户名   (username)
            手机号码 (phonNumber)
            登录密码 (password)
            确认密码 (confirm)
            电子邮箱 (email)
            性别     (sex)
            出生日期 (birthday)
        3 如果登录密码和确认密码不一致 , 重新输入
        4 把用户(User)对象 ,添加到ArrayList集合中 , 打印集合对象即可
 */
public class Demo2 {
    public static void main(String[] args) {
        // 创建集合对象
        ArrayList<User> list = new ArrayList<>();
        // 创建键盘录入对象 , 录入用户的数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.nextLine();
        System.out.println("请输入手机号码:");
        String phoneNumber = sc.nextLine();
        System.out.println("请输入登录密码:");
        String password = sc.nextLine();
        System.out.println("请输入确认密码:");
        // 如果登录密码 , 和确认密码不一致 , 需要重新输入确认密码
        String confirm;
        while (true) {
            confirm = sc.nextLine();
            if (password.equals(confirm)) {
                break;
            } else {
                System.out.println("您输入的登录密码和确认密码不一致, 请重新输入...");
            }
        }
        System.out.println("请输入电子邮箱:");
        String email = sc.nextLine();
        System.out.println("请输入性别:");
        String sex = sc.nextLine();
        System.out.println("请输入出生日期:");
        String birthday = sc.nextLine();
        // 把用户对象添加到集合中
        list.add(new User(username, phoneNumber, password, confirm, email, sex, birthday));
        // 遍历集合
        for (int i = 0; i < list.size(); i++) {
            // 获取集合中的用户对象
            User u = list.get(i);
            System.out.println(u.getUsername() + "---" + u.getPhonNumber() + "---" + u.getPassword() 
            + "---" + u.getConfirm()  + "---" + u.getEmail() + "---" + u.getSex() + "---" + u.getBirthday() );
        }
    }
}
package com.itheima.anonymous;
// 用户类
public class User {
    private String username;
    private String phoneNumber;
    private String password;
    private String confirm;
    private String email;
    private String sex;
    private String birthday;
    public User() {
    }
    public User(String username, String phonNumber, String password, String confirm, String email, String sex, String birthday) {
        this.username = username;
        this.phoneNumber = phonNumber;
        this.password = password;
        this.confirm = confirm;
        this.email = email;
        this.sex = sex;
        this.birthday = birthday;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPhonNumber() {
        return phoneNumber;
    }
    public void setPhonNumber(String phonNumber) {
        this.phoneNumber = phonNumber;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getConfirm() {
        return confirm;
    }
    public void setConfirm(String confirm) {
        this.confirm = confirm;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getBirthday() {
        return birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

3 继承


3.1 为什么学习继承 ?

  • 继承是将多个类的相同属性和行为抽取到单独一个类中,那么多个类无需再定义这些共性属性和行为,只要继承这个单独类即可继承这些属性和行为了
  • 多个类称为子类(派生类),单独的这个类称为父类(基类 或超类)

3.2 继承的格式 ?

  • 使用关键字extends进行连接子类与父类
  • 举例 : public class Student extends People{ … }

3.3 继承的好处 ?

  • 提高代码的复用性
  • 提高代码的维护性
  • 让类与类产生了关系(继承关系) , 是多态的前提
package com.itheima.extends_demo;
/*
    学生类 : 姓名(name) , 课程名称(course) , 所在班级(className)  , 查看课表(lookForm) , 填写反馈数据(write)
    老师类 : 姓名(name) , 课程名称(course) , 部门名称(department) , 查看课表(lookForm) , 发布试题(release)
    设计 : 把学生类 和 老师类的共性内容抽取到一个单独的类中(Person),存储共性内容
    父类 : 姓名(name) , 课程名称(course) ,  查看课表(lookForm)
 */
public class ExtendsDemo1 {
    public static void main(String[] args) {
        Student s = new Student();
        s.setName("张三");
        s.setCourse("Java");
        s.setClassName("三年二班");
        s.lookForm();
        s.write();
    }
}
package com.itheima.extends_demo;
/*
    此类定义的是子类的共性成员
 */
public class Person {
    private String name;
    private String course;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public void lookForm(){
        System.out.println("查看课表");
    }
}
package com.itheima.extends_demo;
/*
    子类只需要定义自己特有的成员 , 共性的成员需要抽取到父类中
 */
public class Student extends Person{
    private String className;
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public void write(){
        System.out.println("填写反馈数据");
    }
}
package com.itheima.extends_demo;
/*
    子类只需要定义自己特有的成员 , 共性的成员需要抽取到父类中
 */
public class Teacher extends Person {
    private String department;
    public String getDepartment() {
        return department;
    }
    public void setDepartment(String department) {
        this.department = department;
    }
    public void release() {
        System.out.println("发布试题....");
    }
}


相关文章
|
8小时前
|
Java ice
【Java开发指南 | 第二十七篇】Java抽象类
【Java开发指南 | 第二十七篇】Java抽象类
9 0
|
8小时前
|
Java ice
【Java开发指南 | 第二十四篇】Java继承
【Java开发指南 | 第二十四篇】Java继承
6 0
|
8小时前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
8小时前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
9 4
|
8小时前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
19 4
|
8小时前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
8小时前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
8小时前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
19 3
|
8小时前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。
|
8小时前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第13天】在计算机科学中,多线程是一种使得程序可以同时执行多个任务的技术。在Java语言中,多线程的实现主要依赖于java.lang.Thread类和java.lang.Runnable接口。本文将深入探讨Java中的多线程编程,包括其基本概念、实现方法以及一些常见的问题和解决方案。