重新学java之面向对象

面向对象

类与对象

类 == 模板
对象 == 依照模板制作的东西
类是一个模板,对象就是这个模板做出来的东西,根据参数的不同,每一个模板做出来的对象也各有不同。

类与类之间最常见的关系

  • 依赖 A use B
  • 聚合 A has B
  • 继承 A is B

封装:封装是一个很重要的概念,简单来,他是把数据和行为组合在一个包中。数据被称为实例域。使用封装使用为保证数据的隐私,保证私有数据不被随意查看或者改动。

构造器

构造器是一种特殊的方法,用来构造并且初始化对象,它能够把定义对象时的参数传给对象的域。而在函数的继承里,子类必须调用父类的构造函数。但是,子类只能继承父类的默认构造函数,如果父类没有默认的构造函数,那子类不能从父类继承默认构造函数.这时子类必须使用super来实现对父类的非默认构造函数的调用,在创建对象时,先调用父类默认构造函数对对象进行初始化,然后调用子类自身自己定义的构造函数构造器与类同名。在构造一个实例的同时,构造器会运行,以便于将实例域初始化为所希望的状态。
如果一个类没有显示写一个构造器,会默认给一个无参构造器。
可以使用this关键字调用构造器方法(有时候还挺好用的)。
构造器与方法的不同

  • 构造器没有返回类型
  • 构造器名必须与类名相同
  • 构造器的使用伴随着new关键字
  • 构造器可以由不止一个

this关键字

this是一个隐式参数,他是区分实例域和局部变量的重要标志。

静态

如果将一个域(这里说的域可以说是成员变量)定义为static,那么每一个类中只有一个这样的域。每一个对象对于所有的实例域

        StaticTest st_1 = new StaticTest();
        System.out.println(st_1.next_id);
        st_1.next_id = 2;
        StaticTest st_2 = new StaticTest();
        System.out.println(st_1.next_id);

与c++中const关键字相同。被static修饰过后的变量,每一个成员共享这个变量。

静态方法是一种不能向对象实施的操作。换句话说,这个静态方法没有隐式参数。这样一来他也就不能访问成员变量。

java传参

记住一个关键点,基本类型,int float这种是传值的,如果传的是对象,那就会临时创建一个对象的副本,使用的是这个副本,而不是原有的对象

重载

如果一个方法拥有相同的名字,不同的参数,这就是重载。在执行的过程中编译器会挑选出具体执行哪个方法,编译器找不到匹配的参数,就会产生编译时错误。java允许重载任何方法,每一个方法都有一个签名。返回类型不是方法签名的一部分也就是说不能通过返回类型的不同,形成一个方法的重载。

继承

面向对象中很核心的思想就是继承。利用继承,人们可以基于已经存在的类构造一个新类。继承已存在的类就是复用这些类的方法。

类 超类 子类

超类就是父类,继承了超类的类被称作子类。子类只能使用父类中可以使用的部分,我们并不能简单的把子类对父类的继承理解为,子类继承了父类的那一部分代码。子类只能访问父类中可以访问的部分。(用权限符修饰)

四个权限修饰符

默认(friendly)
public
protected
private

权限符当前类同包子孙类外部包
privateynnn
protectedyyyn
publicyyyy
默认yynn

举个例子,如果一个类使用了private修饰一个变量或者一个方法,那么由这个类派生出去的子类不能调用这个变量或者方法。(这其实也是封装的思想,这个时候需要一个对外开放的接口来使用这些代码,这一切很麻烦的操作核心思想都是为了保护变量不被随意的改变。)

super

super关键字和this关键字很相似。可以理解为this关键字的父类版本。它是一个指代变量,用于在子类中指代父类对象,只能用于子类的构造函数和实例方法中,不能用于子类的类(静态)方法中。原因是super指代的是一个父类的对象,它需要在运行时被创建,而静态方法是类方法,它是类的一部分。当类被加载时,方法已经存在,但是这时候父类对象还没有被初始化

suepr使用场景1,当父类子类中有同名变量,这个时候子类想要调用父类的同名变量需要加super关键字显示指出。
super使用场景2,使用父类的构造器的时候。

final

如果你不希望自己的类被继承,可以使用final关键字,比如

public final class Employee{}
//那么此时这个类不能被继承

public class Employee{
	public final void get(){}
}

//这个表明子类不能重写这个方法

类型转换

核心:子类不能转换成父类,除非强制转换,父类可以转换为子类

抽象类

抽象类存在的意义就是在定义的父类更具有通用性。
抽象类可以由抽象方法,也可以有不抽象的方法
抽象方法只可能存在在抽象类中
继承抽象类一定要把抽象方法全部重载(除非你也用抽象去定义他)

包装器

有时候,需要将int这样的基本类型转换为对象。int 对应 integer,long 对应 Long,包装器的值是被final修饰的,也就是说初始化之后就不能改变了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值