目录
Java是一种面向对象的高级编程语言,这里的高级编程语言的含义是代码风格很像人类语言
1.类的五大成分
- 成员变量:描述类的属性
- 成员方法:描述类对象的行为
- 构造器:初始化一个类的对象,并返回地址。
- 内部类
- 代码块
2.封装概念
众所周知,面向对象的三大特征是封装、继承、多态
封装的作用:
- 提高安全性
- 实现组件化
封装的规范:
- 属性都私有,用private修饰,只能在本类访问
- 提供get+set方法暴露成员和赋值
封装的核心思想:
- 合理暴露,合理影藏
- 封装是Java的代码风格,及时代码毫无意义,就是要按封装的规范来写
3.this关键字和super关键字
3.1 this关键字作用:
- this关键字代表了当前类对象的引用
- this关键字可以在实例方法和构造方法中
- this用在方法中,谁调用这个方法,this就代表哪个类
- this用在构造器,代表了构造器正在初始化这个对象的引用
注意:
this(...)只能用在构造器的第一行,可以调用其他构造器
使用方法:
* this.子类成员变量 * this.子类成员方法 * this():可以根据参数匹配自己类的其他构造方法
3.2 super关键字作用:
super可以调用父类的属性和方法和构造器
* super.父类成员变量
* super.父类成员方法
* super():可以根据参数匹配父类的构造方法
注意:
子类的全部构造器默认一定会先调用父类的构造器,也就是子类在实例化的时候一定会先实例化父类的构造器,当然如果你自己在子类的构造器上写了super(..)了,就没有默认的那个效果了,
4.static关键字
static可以修饰属性和方法,按照有无static修饰又分为:
静态成员变量/方法:有static关键词修饰的变量/方法,与类一起加载一次,直接用类名调用,属于类。
实例成员变量/方法:无static修饰的成员变量叫做实例成员变量/实例成员方法,对象有几个就加载多少份,必须用对象调用。
5.继承的概述
继承是一种子类到父类的一种关系
也就是“一般”和“特殊”的关系;
人->“一般”,学生->"特殊"
也就是学生是人的特殊存在形式。
在Java中,子类是更强大的,子类不仅有父类的功能,还有自己的功能。
注意:当子类和父类有着共同的方法,子类重写了父类的方法,那么在用子类的时候,是现在子类找,找不到才去父类,所以符合就近原则。
继承的特点:
Java里面只能单继承,不能多继承,但是能多层继承(间接继承),例如
class A extends B{
}
class c extends B{
}
总而言之,也就是一个类可以有多个父类,但是一个子类不能有多个子类,映照我们现代社会,一个孩子是不能有多个父亲的。
6.方法重写
方法重写:当父类的功能不再满足需求的时候,子类需要重写,
方法重写的校验注释:@Override
(方法一旦加入这个注解,那就是成功重写了父类的方法,否则报错!)
重写的要求:
- 子类重写的方法名必须要和父类相同
- 子类重写的方法的返回值类型要么和父类相同,要么比父类的返回值类型范围(如Object>String)
- 子类重写方法的权限修饰符权限应该与父类的权限修饰符相同或者更大。
private:私有的访问权限,只能在当前类中访问。
default:默认访问权限,不使用任何关键字修饰,只能在同一包中的其他类访问。
protected:受保护的访问权限,可以在同一包中的其他类以及不同包中的子类访问。
public:公共的访问权限,可以被任意类访问。
以上是权限修饰符从小到大排序。
4.子类重写的方法申明抛出的异常应该与父类被重写的方法抛出的异常要更小
6.方法重载
方法重载(Method Overloading)是指在同一个类中,允许存在多个同名方法,但这些方法的参数列表必须不同,或者参数类型、顺序、个数至少有一个不同。方法重载的目的是为了方便程序员使用不同的参数调用相似的功能。
方法重载的条件如下:
条件1:在同一个类当中。
条件2:方法名相同。
条件3:形式参数列表不同(类型、个数、顺序) 。
需要注意的是,方法重载与方法的返回值类型无关,只与参数列表有关。方法重载只是编译时的概念,在运行时使用适当的方法进行调用。在调用重载方法时,编译器会根据传入的参数自动匹配调用合适的方法。
package cn.airycloud._14方法重载;
public class OverloadingDemo {
//参数个数不同
private void run(int a){
}
private void run(int b,String a){
}
//参数顺序不同
private void run(String a,int b){}
//参数类型不同
private void run(String a){
}
private void run(){
}
}