Post

day09_面向对象

面向对象的核心概念包括: - ** 对象与对象数组: - 孧习继承: - 继承格式:子类 extends 父类 - 成员变量访问视:根据调用类决定 - 方法重写:在子类中重写父类方法 - 继承与构造方法:继承时先调父类构造 - super super关键字:调用父类成员 - this this关键字:调用本类成员 - - 抽象类与方法: - 抽象类定义:包含至少一个抽象方法的类 - 继承抽象类:必须重写父类所有抽象方法 - 抽象类的例子:`定义员工类和 吠不师类,实现猫和 狗类方法 - 作业案例:定义IT公司的各部门员工将类 - ** 接口: - 接接口定义与实现用: - 接用接口:接口可定义默认方法、静态方法 and 成员变量 - 接口例子:定义USB接口 -虚接口特用:鼠标类implement USB接口,重写方法 -终抽象类与接口的区别: - 抖抽象类可以有成员变量、构造函数和 成数方法 e 掆接口多用方法列举、提供规范 - 技企接口与抽象类可以同时多继承 - �终类与变量的权修饰符: - e 元器有哪些:public, protected> 默认 and private - 拮据于用:`独成员用private,构造public,方法公有 借文章内容,总结关键观点如下: - 技术核心涵盖:类 e子数组、继承 e重写方法 e构造、抽象类与方法 e接口及它们的用法 e权修饰符。通过这些概念学习者可以理解面向对象程序的的基础架构 e原则。这些技术被e用于模拟真实世界的中的对象和其交互 e实现抽象概念,提eton通过使用接口来定义标准、e用抽象类模拟能力的化进程。同时教学通过作业例子深入理解类 e接口设计 e实对象的化。

javaSE 阅读 1 点赞 0 评论 0

day09_面向对象

课前回顾:
  1.对象数组:存的是对象,获取出来的还是对象
  2.继承:
    a.格式: 子类 extends 父类
    b.成员访问特点:
      成员变量:看等号左边是谁,先调用谁中的成员变量;子类没有找父类
      成员方法:看等号右边是谁,先调用谁中的方法,子类没有找父类
    c.方法的重写:子类中有一个和父类方法名以及参数列表都一样的方法
      检测: @Override
      使用场景:对父类中的方法进行升级改造
    d.继承中构造方法的特点:创建子类对象时先初始化父类 -> 构造第一行默认有一个super(),调用父类无参构造
    e.super关键字:代表的是父类引用
      super():调用父类构造方法
      super.变量名:调用父类成员变量
      super.方法名:调用父类成员方法
    f.this关键字:代表的是当前对象,哪个对象调用的this所在的方法,this就代表哪个对象
      this():调用本类(其实是当前对象)构造
      this.变量名:调用本类(其实是当前对象)成员变量
      this.方法名:调用本类(其实是当前对象)方法
    g:继承特点:
      继承不能多继承,只能单继承
      继承能多层继承
      一个父类可以有多个子类
          
今日重点:
  1.会定义抽象类以及抽象方法
  2.会重写抽象方法,进行实现
  3.会定义接口以及实现类
  4.会实现接口
  5.会在接口中定义抽象方法以及实现抽象方法
  6.知道接口的特点

第一章.抽象

image-20260120094930283

1.抽象的介绍

1.抽象方法和抽象类的形成:
  抽取出来的方法无法做具体实现,需要延伸到子类中做具体是实现,就可以定义成抽象方法,抽象方法所在的了一定是抽象类

2.抽象类定义:abstract
   public abstract class 类名{}
3.抽象方法定义:
   修饰符 abstract 返回值类型 方法名(形参);

4.使用:
   a.定义子类,继承抽象父类
   b.必须重写父类中所有抽象方法
   c.创建子类对象(抽象类不能new对象)
      调用重写方法

 5.问题:继承是为了少写重复代码,但是在
    继承的基础上加了抽象方法,还必须在
    子类中重写,那么继承还有意义吗?有
 6.抽象是一种"代码的设计理念",可以将
    抽象类看做是一类事物的"标准",只要是我的子类,都必须要遵守我的规范,拥有我的功能,怎么算遵守了?->重写
public abstract class Animal {
    public abstract void eat();
    public abstract void drink();
}
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗啃骨头");
    }

    @Override
    public void drink() {
        System.out.println("狗用舌头卷水喝");
    }
}

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void drink() {
        System.out.println("猫用舌头舔水喝");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.drink();
        System.out.println("===============");
        Cat cat = new Cat();
        cat.eat();
        cat.drink();
    }
}

2.抽象的注意事项

1.抽象类不能直接new对象,只能创建非抽象子类的对象
2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类中属性使用的
3.抽象类中可以有成员变量,构造,成员方法
4.抽象类中不一定非得有抽象方法,但是有抽象方法的类一定是抽象类
5.抽象类的子类,必须重写父类中的所有抽象方法,否则,编译无法通过.除非该子类也是抽象类
public abstract class Employee {
    private String name;
    private int age;

    public Employee() {
    }

    public Employee(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 abstract void work();
}

public class Teacher extends Employee{
    public Teacher() {
    }

    public Teacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void work() {
        System.out.println("涛哥在台上叭叭叭讲课");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher("涛哥", 14);
        System.out.println(t1.getName()+"..."+t1.getAge());
        t1.work();
    }
}

第二章.综合案例_作业

某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部、维护部)。
研发部(Developer)根据所需研发的内容不同,又分为 JavaEE工程师 、Android工程师 ;
维护部(Maintainer)根据所需维护的内容不同,又分为 网络维护工程师(Network) 、硬件维护工程师(Hardware) 。

公司的每名员工都有他们自己的员工编号、姓名,并要做他们所负责的工作。

工作内容:
- JavaEE工程师: 员工号为xxx的 xxx员工,正在研发电商网站
- Android工程师:员工号为xxx的 xxx员工,正在研发电商的手机客户端软件
- 网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
- 硬件维护工程师:员工号为xxx的 xxx员工,正在修复电脑主板

请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用。

方式1:利用set赋值





方式2:利用构造赋值





第三章.接口

1.接口的介绍

image-20260120112300450

2.接口的定义以及使用

1.接口:是一种标准,规范
2.接口定义:interface
   public interface 接口名{}
3.实现类定义:implements
   public class 实现类 implements 接口{}
4.接口中的成员:
   a.jdk8之前:
     抽象方法:public abstract 返回值类型 方法名(形参) -> 即使不写public abstract,默认也有
     成员变量:public static final 数据类型 变量名 = 值 -> 即使不写public static final 默认也有
   b.jdk8开始:
     默认方法:
          public default 返回值类型 方法名(形参){
                    方法体
                    return 结果
          }
     静态方法:
          public static 返回值类型 方法名(形参){
                  方法体
                  return 结果
          }
     c.jdk9开始:
        私有方法 -> 将public改成private
使用:
  1.定义接口
  2.定义实现类,实现接口
  3.重写接口中的所有抽象方法
  4.创建实现类对象(接口不能new对象)
  5.调用重写方法
public interface USB {
    public abstract void open();
    public abstract void close();
}

public class Mouse implements USB{
    @Override
    public void open() {
        System.out.println("鼠标打开");
    }

    @Override
    public void close() {
        System.out.println("鼠标关闭");
    }
}
public class Test01 {
    public static void main(String[] args) {
        Mouse m = new Mouse();
        m.open();
        m.close();
    }
}

3.接口中的成员

3.1抽象方法

1.格式:
  public abstract 返回值类型 方法名(形参);
2.注意:
  即使不写public abstract 默认也有
3.使用:
  通过实现类重写去使用
public interface USB {
    public abstract void open();
    void close();
}
public class Mouse implements USB{
    @Override
    public void open() {
        System.out.println("鼠标打开");
    }

    @Override
    public void close() {
        System.out.println("鼠标关闭");
    }

}
public class Test01 {
    public static void main(String[] args) {
        Mouse m = new Mouse();
        m.open();
        m.close();
    }
}

3.2默认方法

1.格式:
  public default 返回值类型 方法名(形参){
      方法体
      return 结果    
  }
2.使用:
  a.定义实现类,实现接口/
  b.默认方法可重写可不重写
  c.创建实现类对象,调用默认方法
public interface USB {
    //默认方法
    public default void methodDef(){
        System.out.println("接口中的默认方法");
    }
}
public class Mouse implements  USB{
    @Override
    public void methodDef(){
        System.out.println("重写的接口中的默认方法");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.methodDef();
    }
}

3.3静态方法

1.格式:
  public static 返回值类型 方法名(形参){
      方法体
      return 结果
  }
2.使用:
  接口名直接调用
public interface USB {
    //静态方法
    public static void methodSta(){
        System.out.println("接口中的静态方法");
    }
}

public class Test01 {
    public static void main(String[] args) {
        USB.methodSta();
    }
}

默认方法和静态方法的使用有啥意义:

将来我们开发都是面向接口编程–>都是先定义一个接口,这个接口相当于是"功能的大集合",接口中定义的都是我们要实现的功能,然后在具体的实现类中实现,但是如果我们要临时加一个小功能,这个小功能不需要几行代码,此时我们就没必要在接口中定义抽象方法了,再去实现类中实现了,所以我们就可以在接口中直接定义默认方法或者静态方法,在接口中直接实现了就完事了!

3.4.成员变量

1.格式:
  public static final 数据类型 变量名 = 值
2.注意:
  a.即使不写public static final,默认也有
  b.习惯上我们将static final修饰的变量名写成大写
  c.成员变量需要自己手动赋值
3.使用:
  接口名直接调用
public interface USB {
    public static final int NUM = 10;
    int NUM2 = 20;
}

public class Test01 {
    public static void main(String[] args) {
        System.out.println(USB.NUM);
        System.out.println(USB.NUM2);
    }
}

3.5.私有方法

1.格式:
  将public改成private
public interface USB {
    private void method(){
        System.out.println("接口中的私有方法");
    }
    
/*    public static void methodSta(){
        method();
    }*/

    public default void methodDef(){
        method();
    }
}
public class Mouse implements  USB{

}
public class Test01 {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.methodDef();
    }
}

特殊语法: 接口名.super.方法名()

public class 实现类 implements 接口A,接口B{

​ public void method(){

​ 接口名.super.方法名()

​ }

}

public interface 接口A{

​ default void method(){

​ }

}

public interface 接口B{

​ default void method(){

​ }

}

4.接口的特点

1.接口一个多继承-> 一个接口可以继承一个或者多个接口
  public interface 接口A extends 接口B,接口C{}
2.接口可以多实现-> 一个实现类可以同时实现一个或者多个接口
  public class 实现类 implements 接口A,接口B{}
3.一个子类可以继承一个父类的同时实现一个或者多个接口
  public class Zi extends Fu implements 接口A,接口B{}

当一个类实现多个接口时,如果接口中的抽象方法有重名且参数一样的,只需要重写一次

public interface InterfaceA {
    public abstract void method();
    public abstract void method2();
}
public interface InterfaceB {
    public abstract void method();
    public abstract void method2(int num);
}

public class InterfaceImpl implements InterfaceA, InterfaceB{

    @Override
    public void method() {
        System.out.println("重写的默认方法");
    }

    @Override
    public void method2(int num) {
        System.out.println("重写的有参的method02");
    }

    @Override
    public void method2() {
        System.out.println("重写的无参的method02");
    }
}

当一个类实现多个接口时,如果默认方法有重名的,参数一样,默认方法必须要重写一次

public interface InterfaceA {
    public abstract void method();
    public abstract void method2();
    
    public default void methodDef(){
        System.out.println("接口A中的默认方法");
    }
}

public interface InterfaceB {
    public abstract void method();
    public abstract void method2(int num);

    public default void methodDef(){
        System.out.println("接口B中的默认方法");
    }
}
public class InterfaceImpl implements InterfaceA, InterfaceB{

    @Override
    public void method() {
        System.out.println("重写的默认方法");
    }

    @Override
    public void method2(int num) {
        System.out.println("重写的有参的method02");
    }

    @Override
    public void method2() {
        System.out.println("重写的无参的method02");
    }

    @Override
    public void methodDef() {
        System.out.println("重写的默认方法");
    }
}

5.接口和抽象类的区别

相同点:
  a.都位于继承的顶端,用于被其他类实现或者继承
  b.都不能new
  c.都包含抽象方法,其子类都必须重写这些抽象方法

不同点:
  a.抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等
  b.接口:成员单一,一般抽取接口,抽取的都是方法,是功能的大集合
  c.类不能多继承,接口可以
image-20260120154108647

第四章.final关键字

1.概述:代表的是最终的
2.使用:
  a.修饰一个类
  b.修饰一个方法
  c.修饰一个成员变量
  d.修饰一个局部变量
  e.修饰一个对象

1.修饰类

1.格式:public final class 类名{}
2.特点:
  被final修饰的类不能被继承
public /*final*/ class Animal {
}
public class Dog extends Animal{
}

2.修饰方法

1.格式:
  修饰符 final 返回值类型 方法名(形参){
      方法体
      return 结果
  }

2.特点:
  a.被final修饰的方法不能被重写
  b.final和abstract不能一起使用    
public /*final*/ class Animal {
    public final void eat(){
        System.out.println("吃吃吃");
    }

    //public abstract final void drink();
}

public class Dog extends Animal{
/*    public final void eat(){
        System.out.println("吃吃吃");
    }*/
}

3.修饰成员变量

1.格式: final 数据类型 变量名
2.特点:
  被final修饰的成员变量,不能二次赋值,相当于常量
public class Person {
    public final String name = "张三";

    public Person() {
    }
    
/*    public Person(String name) {
        this.name = name;
    }*/

    public String getName() {
        return name;
    }
    
/*    public void setName(String name) {
        this.name = name;
    }*/
}

4.修饰局部变量

1.格式: final 数据类型 变量名 = 值
2.特点:不能二次赋值    
public class Test01 {
    public static void main(String[] args) {
        final int i = 10;
        //i = 20;
        System.out.println(i);
    }
}

5.修饰对象

1.格式: final 类名 对象名 = new 类名()
2.特点:被final修饰的对象,地址值不能改变,但是对象的属性值可以改变    
public class Student {
    private int id;
    private String name;

    public Student() {
    }

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    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 class Test02 {
    public static void main(String[] args) {
        final Student s1 = new Student(1,"张三");
        System.out.println(s1);
        //s1 = new Student();
        s1.setName("李四");
        System.out.println(s1.getName());
    }
}

第五章.权限修饰符

1.概述:在java中,有四种权限修饰符
  public:公共的访问权限,被public修饰的在哪里都能使用
  protected:受保护的
  默认:成员变量和方法前面的权限修饰符啥也不用,不写
  private:私有的,只能在本类中使用
public protected 默认 private
同类 yes yes yes yes
同包不同类 yes yes yes no
不同包子父类 yes yes no no
不同包非子父类 yes no no no
将来四种权限修饰符使用方式:
  1.属性:private修饰 -> 封装思想
  2.构造:public修饰 -> 便于创建对象(工具类除外)
  3.方法:public修饰 -> 便于调用

继续阅读

全部归档
day17.集合
day17.集合

本文详细介绍了Java集合框架中的List、list及、set等和泛型相关知识。关键内容包括: 11集合简述: - ArrayList底层通过数组实现,初始容量动态扩展 - linkedList底层为双向链表,支持高效首尾插入删操作,但迭代时效率较低 -集合使用: - arrayList适合随机访问,但增删效率低下 - linkedlist迭代效率高但增删较慢 - hashmapset使得集合不遵循顺序 -linkedHashSet结合了两者优点 "st集合: - set不能保证元素顺序 - hashSet通过散列有效处理去重 -泛型应用: - 使用泛型可以统一类型,减少类型转换异常 -通配符?可以对不确定泛型类型 -上限? super多次类,下取限? super泛型类 -泛型类、方法、接口支持使用 本总结归纳了集合中各类数据结构的特点、应用及泛型使用方法,对于思考和应用Java集合框架&有着较好的指导和解释作用。

day16.集合
day16.集合

以下是根据提供的多段文档提炼的文章摘要: ### 摘要 本文详细介绍了Java多线和和、程序集合概念和和方法及其相关操作。文章首先回顾了了Java中的的基本概念,包括多线创建的方式——继承Thread或实现Runnable、以及Thread中的一些重要方法(如sleep、、start"和run∩∩。随后,文章介绍了多线同步机制,包括使用synchronized关键字和实现同步代码块以及使用同步方法的方式来控制多个线共同操作。 文章以较多篇幅介绍了函数流操作与以及相关函数接口和如Function、ConsumerPredicate#SupplierConsumerupplier。示例使用了Supupplier实现在最大值操作,展示了如何用Supplier流操作来过滤掉定定特定规则的材料集合。变量另外还展示了几种常用的函数流操作:如filter、filter、filter\和filterfilterfilter切片(long #和、limit值截止数量),以及流.aggregate方法来集合汇总生成新集合。 在**集合框架**部分,文章深入介绍了ArrayList与和LinkedList的基本概念与操作以及并发修改注意事项。文章同时讲解了了几种常见的数据结构**如数组、链表、以及树形结构**,并通过示例展示了这些数据结构的基本操作。 ### 操作条目如下: 11.多线述了了Jav中多合集分目的。 12简明介绍了集合的间操作以及几种重要的操作方法。 15.详细讲解了了�流操作以及相关接口的应用。 1.介绍合例操作优先。 55.以杰大量数据举例清晰解释了常见数据结构的与如上述这些操作。

评论