java学习-4

方法重载

重载就是在一个类中,有相同的函数名称,但是形参不同的函数

方法重载的规则

  • 方法名相同
  • 参数列表必须不同(编译器以此来选择相对应的方法)
  • 方法的返回类型没有要求

理论: 方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法。

可变参数(不定项参数)

jdk1.5开始,Java支持传递同类型的可变参数

在方法声明中,在特定参数类型后加上一个省略号(...)

在一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通参数必须在他之前声明

public class Main {
    public static void main(String[] args) {
        //this.test(1,2,3,4);静态方法中没有this关键字
        Main main = new Main();
        main.test(1,2,3,4);
    }

    public void test(int... i){
        System.out.println(i[0]);
        System.out.println(i[1]);
        System.out.println(i[2]);
        System.out.println(i[3]);
    }
}

数组

相同类型数据的有序集合

数组的创建

dataType[] arrayRefVar;  //首选方法
dataType arrayRefVar[];  //效果相同,但不是首选方法,类似C语言

Java语言使用new操作符来创建数组

dataType[] arrayRefVar=new dataType[arraySize];

数组长度

arrayRefVar.length

三种初始化

静态初始化

int[] a={1,2,3};
Man[] mans={new Man(1,1),new Man(2,2)};

动态初始化

int[] a=new int[2];
a[0]=1;
a[1]=2;

数组的默认初始化

数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化

数组工具类——Arrays

Arrays.toString(a);//打印数组元素
Arrays.sort(a);//升序排序
Arrays.fill(a,0)//数组赋值为0
...

面向对象

构造器

相当于C++的构造函数,没有返回值,也不能写void,一个类不写也会存在一个构造方法

定义了有参构造,如果还需要使用无参构造就需要显示无参构造

继承

java中类只有单继承,没有多继承

继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。

super

子类通过super访问父类

调用父类的构造器必须在子类的第一行

//父类
public class person(){
    public person(){
        
    }
}

//子类
public class man(){
    public man(){
        super();//必须在子类构造器的第一行
        
    }
}

注意点

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中
  3. super和this不能同时调用构造方法

Vs this:

代表的对象不同:

  1. this:本身调用者这个对象
  2. super:代表父类对象的应用

前提

  1. this:没有继承也可以使用
  2. super:只能在继承条件下才可以使用

构造方法

  1. this(): 本类的构造
  2. super():父类的构造

方法的重写

子类重写父类的方法,且方法不能是静态方法

  1. 方法名要相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大
  4. 抛出的异常:范围可以被缩小,但不能扩大

多态

  1. 动态编译:类型可扩展、
  2. 同一方法可以根据发送对象的不同而采用多种不同的行为方式
  3. 一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多

多态存在的条件

  1. 有继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

多态是方法的多态,属性没有多态性

//一个对象的实际类型是确定的
//new Student();
//new Person();

//可以指向的引用类型就不确定了,父类的引用指向子类
Student s1=new Student();
Person s2=new Student();
Object s3=new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大

多态的注意事项

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类,有联系
  3. 存在的条件:继承关系,方法需要重写,父类引用指向子类对象

instanceof

instanceof 左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误

抽象类

abstract

  1. 不能new这个抽象类,只能靠子类去实现他
  2. 抽象类中可以写普通的方法
  3. 抽象方法必须在抽象类中
  4. 抽象方法只有方法名字,没有方法的实现

接口

接口:只有规范

interface 定义的关键字

接口中的所有的定义都是抽象的

类可以实现接口 implements,接口可以多继承

public class UserServiceImpl implements UserService,TimeService{
    
} 

内部类

public class Outer{
    private id=10;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    
    public class Inner{
        public void in(){
            System.out.println("这是内部类的方法");
        }
        //获得外部类的私有属性
        public void getID(){
            System.out.println(id)
        }
    }
    
    //局部内部类
    public void method(){
        class Inner{

        }
    }
}
posted @ 2025-02-19 21:47  狐狸胡兔  阅读(16)  评论(0)    收藏  举报