涛声依旧在 发表于 2022-12-2 18:08:04

day12_内部类&API

1、参数传递

1.1 类名作为形参和返回值


[*]类名——方法形参
    方法的形参是类名,需要的是该类的对象;实际传递的是该对象的地址值

[*]类名——返回值
    方法的返回值是类名,返回的是该类的对象;实际传递的是该对象的地址值

[*]示例代码
public class Cat {
    public void eat(){
      System.out.println("猫吃鱼");
    }
}

public class CatOperator {
    //类名作为方法的形参
    public void useCat(Cat c){ //Cat c = new Cat();
      c.eat();
    }

    //类名作为方法的返回值
    public Cat getCat(){
      Cat c = new Cat();
      return c;
    }
}

public class CatDemo {
    public static void main(String[] args) {
      //创建操作类对象,并调用方法
      CatOperator co = new CatOperator();
      Cat c = new Cat();
      co.useCat(c);

      Cat c2 = co.getCat();
      c2.eat();
    }
}1.2 抽象类作为形参和返回值(理解)


[*]抽象类作为形参和返回值

[*]方法的形参是抽象类,其实需要的是该抽象类的子类对象
[*]方法的返回值是抽象类,其实返回的是该抽象类的子类对象

[*]示例代码
public class Cat extends Animal {
    @Override
    public void eat() {
      System.out.println("猫吃鱼");
    }
}

public abstract class Animal {
    public abstract void eat();
}

public class AnimalOperator {
    public void userAnimal(Animal a){
      a.eat();
    }

    public Animal getAnimal(){
      Animal a = new Cat();
      return a;
    }
}

public class AnimalDemo {
    public static void main(String[] args) {
      AnimalOperator ao = new AnimalOperator();
      Animal a = new Cat();
      ao.userAnimal(a);

      Animal ao2 = ao.getAnimal();
      ao2.eat();
    }
}1.3 接口作为形参和返回值(理解)


[*]接口作为形参和返回值

[*]方法的形参是接口,其实需要的是该接口的实现类对象
[*]方法的返回值是形参,其实返回的是该接口的实现类对象

[*]示例代码
public interface Jumpping {
    void jump();
}

public class Cat implements Jumpping{
    @Override
    public void jump() {
      System.out.println("猫可以跳高");
    }
}

public class JumppingOperator {
    public void useJumpping(Jumpping j){//Jumpping j = new Cat();
      j.jump();
    }

    public Jumpping getJumpping(){
      Jumpping j = new Cat();
      return j;
    }
}

public class JumppingDemo {
    public static void main(String[] args) {
      JumppingOperator jo = new JumppingOperator();
      Jumpping j = new Cat();
      jo.useJumpping(j);

      Jumpping j2 = jo.getJumpping();
      j2.jump();
    }
}2、内部类

2.1 内部类的基本使用(理解)


[*]内部类概念

[*]在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被成为内部类
[*]内部类定义格式

[*]格式:


class 外部类名{
    修饰符 class 内部类名{
   
    }
}

[*]

[*]

[*]举例


public class Outer {
    public class Inner{
      
    }
}

[*]内部类的访问特点

[*]内部类可以直接访问外部类的成员,包括私有
[*]外部类要访问内部类的成员,必须创建对象

[*]示例代码
public class Outer {
    private int num = 10;
    public class Inner{
      public void show(){
            System.out.println(num);
      }
    }

    public void method(){
      Inner i = new Inner();
      i.show();
    }
}2.2 成员内部类(理解)


[*]成员内部类的定义位置

[*]在类中方法外,跟成员变量是一个位置

[*]外界拆功能键成员内部类格式

[*]格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
[*]举例:Outer.Inner oi = new Outer().new Inner();

[*]示例代码
public class Outer {
    private int num =10;
    private class Inner {
      public void show(){
            System.out.println(num);
      }
    }

    public void method(){
      Inner i = new Inner();
      i.show();
    }
}

public class OuterDemo {
    public static void main(String[] args) {
      Outer o = new Outer();
      o.method();
    }
}2.3 局部内部类(理解)


[*]定义位置

[*]定义在方法中

[*]使用方式

[*]局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
[*]该类可以直接访问外部类的成员,也可以访问方法内的局部变量

public class Outer {
    private int num = 10;
    public void method(){
      int num2 = 20;
      class Inner{
            public void show(){
                System.out.println(num);
                System.out.println(num2);
            }
      }

      Inner i = new Inner();
      i.show();
    }
}

public class OuterDemo {
    public static void main(String[] args) {
      Outer o = new Outer();
      o.method();
    }
} 2.4 匿名内部类(应用)


[*]匿名内部类的前提

[*]存在一个类或接口,这里的类可以是具体类也可以是抽象类

[*]匿名内部类的格式

[*]格式:new 类名(){重写方式}  /new 接口名 () {重写方法}
[*]举例

new Inter(){
    @Override
    public void method(){}
}

[*]匿名内部类的本质

[*]本质:是一个继承了该类或者实现类该接口的子类匿名对象

[*]匿名内部类的细节

[*]匿名内部类可以通过多态的形式接受

Inter i = new Inter(){
    @Override
    public void method(){
   
    }
}

[*]匿名内部类直接调用方法
public interface Inner {
    public void method();
}

public class InnerDemo {
    public static void main(String[] args) {
      new Inner(){
            @Override
            public void method(){
                System.out.println("我是匿名内部类");
            }
      }.method();
    }
}2.4 匿名内部类在开发中的使用(应用)


[*]使用

[*]当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统代码

[*]示例代码
public interface Jumpping {
    void jump();
}

public class Cat implements Jumpping{
    @Override
    public void jump() {
      System.out.println("猫可以跳高了");
    }
}

public class Dog implements Jumpping{
    @Override
    public void jump() {
      System.out.println("狗可以跳高了");
    }
}

public class JumppingOperator {
    public void method(Jumpping j){
      j.jump();
    }
}

public class JumppingDemo {
    public static void main(String[] args) {
      //创建接口操作类对象调用method方法
      JumppingOperator jo = new JumppingOperator();

      //方式一:传统方式
      //操作猫的行为
      Jumpping j1 = new Cat();
      jo.method(j1);
      //操作狗的行为
      Jumpping j2= new Dog();
      jo.method(j2);

      //方式二:匿名内部类的方式
      //操作猫的行为
      jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("猫可以跳高了");
            }
      });
      //操作狗的行为
      jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("狗可以跳高了");
            }
      });
    }
}3、常用API

3.1 Math(应用)


[*]概述:Math包含执行基本数字的方法
[*]方法的调用方式:Math类中无构造方法,但内部的方法都静态的,则可以通过 类名进行调用
[*]常用方法:
https://img2023.cnblogs.com/blog/2806101/202212/2806101-20221202165540585-1722165772.png
3.2 System(应用)


[*]常用方法
https://img2023.cnblogs.com/blog/2806101/202212/2806101-20221202165619027-1116793824.png

[*]示例代码

[*]需求:在看控制台输出1-10000,计算这段代码执行了多少毫秒

public class SystemDemo {    public static void main(String[] args) {      //需求:在控制台输出1-10000,计算这段代码执行了多少毫秒      //获取开始的时间节点      long start = System.currentTimeMillis();      for (int i = 1; i
页: [1]
查看完整版本: day12_内部类&API