JAVA学习笔记:第六天

面向对象主要特征

继承:子类自动共享父类属性和方法的机制。

封装:隐藏对象的内部细节,只向外部提供接口,降低对象间的耦合度。

多态:对于子类,可以用不用的方法替代实现父类的服务的方法。

继承的含义

  • 在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承(泛化)。
  • 被继承的类称为父类(超类,基类),新的类称为子类(派生类)。
  • 子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法。
[修饰符] class 子类名 extends 父类名

规则:

  1. java只支持单继承
  2. 一个父类可以有多个子类
  3. 子类继承父类所有的属性和方法

调用构造方法

可用 this 或者 super 调用其他的构造方法

super():调用父类的构造器,只能出现在子类的构造器中,且必须是第一行。

this();调用本类的构造器,只能卸载构造器的第一行。

同一个构造器中不能同时出现 super() 和 this()。

super (参数1,参数2,…);

封装

权限修饰符:

方法的覆盖

还可以称为重写(rewrite),是对从父类中继承来的方法进行改造,只有在子类继承父类时发生。
规则:
  • 相同的方法名
  • 相同的参数列表(参数数量、参数类型、参数顺序都要相同)
  • 相同的返回值类型
  • 子类覆盖方法的访问权限要不小于父类中被覆盖方法的访问权限

abstract 

访问权限修饰符] abstract 返回值类型 抽象方法名 (参数列表) ;
只有方法声明,没有方法实现的方法
抽象方法需要子类重写该方法,因此不能用private、final修饰

final

final可以修饰的元素
  1. 类:不能被继承
  2. 变量(属性和局部变量):不能被重新赋值  在声明时赋值,或在构造器中赋值 系统不会对final属性默认的赋初始值
  3. 方法:不能在子类中被覆盖,即不能修改

抽象类

[访问权限修饰符] abstract class 类名 {
……
}
抽象类是抽象方法和非抽象方法的集合,
抽象类中可以全部是抽象方法
抽象类中可以全部为非抽象方法

接 口(interface)

接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性

接口的成员:
  • 常量(字段)
  • 抽象方法
[访问权限修饰符] interface 接口名 { 
接口的成员
}
注意:
  • 接口不是一个类,没有构造器,不能被实例化
  • 接口使用interface关键字来定义,而不是class
  • 接口默认: 常量:public static final  抽象方法: public abstract
JKD8开始,添加了一种新功能-默认方法。默认方法允许接口方法定义默认实现,而所有子类都将拥有该方法及实现。
[访问权限修饰符] interface 接口名 { 
default 方法返回值 方法名(形参){
方法体; } }

final常用方式

  • 按照常量含义,对应放置在特定的抽象类或接口中;
  • 把常量设置为静态static,多个实例共享该常量,没有必要每个对象保存一份;
  • 常量设置为final类型,赋值以后不能再改变;
  • 最后注意遵守常量命名规范,所有字母大写、单词之间用下划线。

引用数据类型的转换

上溯造型

向上转型(Upcasting)— 子类转换为父类,自动转换;

下溯造型

向下转型(Downcasting):强制转换

instanceof 运算符

通过 instanceof 来判断是哪一个子类的。

多态

多态存在的三个必要条件
  1. 要有继承,或实现
  2. 要有重写
  3. 父类引用指向子类对象

内部类

内部类特性
  • 内部类就是定义在另一个类内部的类。
  • 内部类对于同一包中的其它类来说,内部类能够隐藏起来。
[访问权限修饰符] class 类名{ 
[访问权限修饰符] class 类名{ 
内部类成员
}
外部类成员
}
注意:
  • 内部类可以访问其外部类中所有的属性和方法,无需创建外部类的对象。
  • 必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。
  • 如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获
  • 得比外部类的变量和方法更高的优先级。
  • 不能定义static变量
内部类权限
普通类的访问权限修饰符
  • default
  • public
内部类的访问权限修饰符
  • default
  • public
  • protected
  • private

静态内部类

static标识 的内部类为静态内部类。
静态内部类特点:
  • 静态内部类作为外部类的静态成员,不能访问外部类非静态成员。
  • 非静态内部类只能定义非静态成员,而静态内部类可以定义静态成员和非静态成员。
静态内部类实例化:
  • 使用Outer.Inner inn=new Outer.Inner()方式实例化静态内部类。
  • 非静态内部类不可以使用上面的方式实例化。
[访问权限修饰符] class 类名{ 
[访问权限修饰符] static class 类名{ 
内部类成员
}
外部类成员
}
局部内部类
在一个类的方法体中或程序块内定义的内部类。
局部内部类特点:
在方法定义的内部类中只能访问方法中的final类型的局部变
匿名内部类
没有定义类名 的内部类,称为匿名内部类
匿名内部类特点:
  • 匿名内部类没有访问修饰符。
  • new 匿名内部类,这个类首先是要存在父类或接口。
  • 外部类方法形参或局部变量需要被匿名内部类使用,必须为final。
new 父类|接口(){ 
//重写父类或接口的抽象方法
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值