JAVA面向对象知识点总结

本文总结了JAVA面向对象的关键概念,包括形参放入数组的两种方式、参数绑定的原理、继承时构造函数的使用,以及继承中的转型操作。讲解了多态的概念,并通过抽象类和接口展示了抽象方法和抽象类的定义。还探讨了内部类、匿名类的创建与使用,以及静态方法和模块系统的基本知识。最后,涉及了类路径和模块配置。
摘要由CSDN通过智能技术生成

JAVA面向对象知识点总结

  1. 形参如何放入数组?
    第一种用类型+…的形式
    第二种用可以直接把形参写成数组的形式
    如下
class Group {
    private String[] names;

    public void setNames(String... names) {
        this.names = names;
    }
}
class Group {
    private String[] names;

    public void setNames(String[] names) {
        this.names = names;
    }
}
  1. 参数绑定
    当传递的参数为基本类型和引用类型时,参数的绑定状态有所不同。
    当传递的参数为基本参数时,参数传递后,任意修改一方的数值,不影响另一方
    当传递的参数魏引用类型是,参数传递后,修改一方的数值,另一方发生影响。因为它们共同引用同一个地址的数据。

  2. 继承时的构造函数
    在子类的构造函数中,如果父类没有默认不传递值的构造函数,那么在子类构造函数需要传递值的时候,要切记传递父类的值,使用super调用父类构造函数。

  3. 关于继承中的转型问题
    在想象类的继承结构的时候,最好把类的父类想象成更高一级的类。因此向上转型的含义为把一个子类当作父类来引用。最后又由向下转型来复原。

Person p1 = new Student();
Student si =  (Student)p1;

为了避免向下转型的错误,可以用instanceof操作符来判断是否转的下去。

System.out.println(p instanceof Person); // true
  1. 多态
    关于多态是指函数最后的运行方法取决于函数的实际类型。

  2. 抽象类
    如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。
    因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。
    使用abstract修饰的类就是抽象类。我们无法实例化一个抽象类:
    抽象类的作用是提供一个类设计的模板。

public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run();
    }
}

abstract class Person {
    public abstract void run();
}

class Student extends Person {
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

总之 类中只要有一点abstract这个类就是抽象类,就还不可以实例化。

  1. 接口
    接口跟抽象类的区别在于接口的全部属性均为public abstract 所以不能在接口中包含实例字段,此外,接口允许多继承。如果接口中存在字段,一定为public static final 类型。
  2. 静态方法
    静态方法只能操作静态类。
  3. 内部类
    内部类不能脱离外部包含的类独立存在,代码示例如下
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer("Nested"); // 实例化一个Outer
        Outer.Inner inner = outer.new Inner(); // 实例化一个Inner
        inner.hello();
    }
}

class Outer {
    private String name;

    Outer(String name) {
        this.name = name;
    }

    class Inner {
        void hello() {
            System.out.println("Hello, " + Outer.this.name);
        }
    }
}

观察上述代码,要实例化一个Inner,我们必须首先创建一个Outer的实例,然后,调用Outer实例的new来创建Inner实例,访问时也要用outer.this来访问。

  1. 匿名类
    匿名类的声明结构如下:
    在这里插入图片描述
    用来完成对某一特定功能的实现。
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer("Nested");
        outer.asyncHello();
    }
}

class Outer {
    private String name;

    Outer(String name) {
        this.name = name;
    }

    void asyncHello() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello, " + Outer.this.name);
            }
        };
        new Thread(r).start();
    }
}

  1. classpath
    指定了jvm如何找到class文件,具体用法等用到了再深入。
  2. 模块
    模块确定了不同jar之间的依赖关系.模块中的对外提供资源的权限要在module-info.java中说明。如
module hello.world {
    exports com.itranswarp.sample;

    requires java.base;
	requires java.xml;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值