面向对象

  • 修饰符 属性类型 属性名 = 属性值;

类与方法

  • class是数据类型,是一种抽象的数据类型,是对某一类事务的整体描述,如人,动物,植物
  • instance是实例对象,如小明,狗
  • 一个class可以包含多个field,如public int age;
  • private修饰的field要用set、get方法修饰,通过this.关键字调用field
  • 属性+方法=类,所以方法在类中,类就是class
  • 方法的定义:
    修饰符 返回值类型 方法名(…){
    //方法体
    return 返回值;
    }
  • 方法的调用:
    静态方法:类名.方法名;
    非静态方法:实例化后再调用
    对象类型 对象名=new 对象值;
    对象名.方法名
  • static是与类一起加载的
  • 使用new关键字进行创建时,会给创建好的对象进行默认的初始化,以及对类中构造器进行调用
  • 类中含有:
    静态的属性 -->属性
    动态的行为 -->方法

构造方法与重载

  • 创建实例的时候,实际上是通过构造方法来初始化实例的
  • new 的本质就是在调用构造方法
  • idea中的生成构造方法的快捷键:Alt + insert
  • 构造方法的名称就是类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是,和普通方法相比,构造方法没有返回值(也没有void),调用构造方法,必须用new操作符。如public Person(参数){}
  • 如果自定义了一个构造方法,那么,编译器就不再自动创建默认构造方法
    一个构造方法可以调用其他构造方法,这样做的目的是便于代码复用。调用其他构造方法的语法是this(参数)、
  • 一旦定义了有参构造,那么无参构造必须要显示定义
  • 在一个类中,可以定义多个方法。如果有一系列方法,它们的功能都是类似的,只有参数有所不同,那么,可以把这一组方法名 做成同名方法。
  • 这种方法名相同,但各自的参数不同,称为方法重载(Overload)

举个例子,String类提供了多个重载方法indexOf(),可以查找子串:

int indexOf(int ch):根据字符的Unicode码查找;

int indexOf(String str):根据字符串查找;

int indexOf(int ch, int fromIndex):根据字符查找,但指定起始位置;

int indexOf(String str, int fromIndex)根据字符串查找,但指定起始位置。

封装

  • 属性私有,get / set
  • idea中的生成get set方法的快捷键:Alt + insert

继承和多态

  • Java使用extends关键字来实现继承。

  • 子类自动获得了父类的所有字段,严禁定义与父类重名的字段!

  • 继承有个特点,就是子类无法访问父类的private字段或者private方法。这使得继承的作用被削弱了。为了让子类可以访问父类的字段,我们需要把private改为protected。用protected修饰的字段可以被子类访问。

  • java中只有单继承,没有多继承,一个父亲可以有多个儿子,一个儿子不能有多个爸爸

  • super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName;

  • 子类会默认调用父类的无参构造,调用父类的构造器必须在子类构造器的第一行

  • 如果父类没有默认的构造方法,子类就必须显式调用super()并给出参数以便让编译器定位到父类的一个合适的构造方法。

  • super必须调用父类的构造方法,必须在构造方法的第一行
    super必须出现在子类的方法或者构造方法中
    super和this不能同时调用构造方法

  • this:代表本身调用的这个对象;没有继承也可以使用;this();调用本类的构造方法
    super:代表父类对象的引用;只能在继承条件才可以使用;super();调用父类的构造方法

  • 在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,方法体不同,被称为覆写(重写)(Override)

  • 重写需要有继承关系,子类对父类方法进行重写,是对方法进行重写,属性不能重写
    方法名必须相同
    参数列表必须相同
    修饰符范围可以扩大,但是不能缩小,public>protected>default>private
    抛出的异常范围可以缩小,但不能扩大

  • 重写的对非静态的方法进行重写,对于静态方法

  • 方法的调用只与左边定义的数据类型有关

//A extends B
B b = new A();//父类的调用指向了子类
b.test();//调用A中的test方法
  • 方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。
  • 多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
  • 在子类的覆写方法中,如果要调用父类的被覆写的方法,可以通过super来调用。

抽象类

  • 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法
  • 把一个方法声明为abstract,表示它是一个抽象方法,本身没有实现任何方法语句。因为这个抽象方法本身是无法执行的,所以,Person类也无法被实例化。编译器会告诉我们,无法编译Person类,因为它包含抽象方法。必须把Person类本身也声明为abstract,才能正确编译它
  • 无法实例化一个抽象类
  • 因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。

例如,Person类定义了抽象方法run(),那么,在实现子类Student的时候,就必须覆写run()方法

接口

  • 在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力
  • 如果一个抽象类没有字段,所有的方法全都是抽象方法,就可以把该抽象类改写为接口interface
  • 当一个具体的class去实现一个interface时,需要使用implements关键字。
  • 一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个interface
  • 一个interface可以继承自另一个interface。interface继承自interface使用extends,它相当于扩展了接口的方法。

内部类

  • 如果一个类定义在另一个类的内部,这个类就是Inner Class它与普通类有个最大的不同,就是Inner Class的实例不能单独存在,必须依附于一个Outer Class的实例。
  • Inner Class和普通Class相比,除了能引用Outer实例外,还有一个额外的“特权”,就是可以修改Outer Class的private字段,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值