Java面向对象
构造器
类中的构造器被称为构造方法,是在进行创建对象的时候必须调用的,并且构造器有以下特点:
1.必须和类的名字相同
2.必须没有返回类型
作用:
1.new的本质是在调用构造方法
2.初始化对象的值
Tip: 如果定义了有参构造之后,想使用无参构造(即new后括号不带参数),就要在再定义一个无参参数。
封装
程序追求高内聚,低耦合。封装即是数据的隐藏,禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问。 举例: 在Student类里将name、id、sex属性设为私有。
这样在引用这个类时就不能直接引用这个属性。
可以用get、set方法来操作这些属性。
get获得这个数据
set给这个数据设置值
用法
继承
继承的定义
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。通俗的讲就是子类有的父类不一定有,父类有的子类一定有,父类更通用,子类更具体。
继承的格式
继承的优点
冗余少,代码更为简洁,后期更好维护。
关键词
extends关键字的继承是单继承(即一个子类只能有一个父类),可以是多重继承(即一个父类可以有多个子类)。
implements关键字能同时继承多个关键词。
super关键字能够对父类成员的访问,用来引用当前对象的父类。调用父类构造器,必选在子类构造器第一行。(只有在继承条件下才可以使用)
this关键字引用自己。
super和this不能同时调用构造方法。
重写
能够在子类里改变与父类同名的方法,但不能新增方法。(必须是非静态方法和public)
(来源菜鸟教程)
访问权限:public>protected>Default>private(修饰符的范围可以扩大但不能缩小)
抛出的异常可以被缩小但不能被扩大
在子类中重写父类方法,用super关键字强调。
重载
在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
例子
输出
重写和重载的区别
重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同。
重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法。
多态
多态是同一个行为具有多个不同表现形式或形态的能力。
存在的必要条件:继承、重写。
父类的引用指向子类的实现
父类可以指向子类,但不能调用子类独有的方法。对象能执行哪些方法,主要看左边的类型,和右边关联不大。
父类 对象名=new 子类()
static
静态方法(static):方法的调用只和左边定义的数据类型有关。
静态变量对于类而言内存只有一个,静态变量尽量通过类名去访问。
非静态方法可以调用静态方法,静态方法可以不用创建对象直接使用
生成顺序:静态代码块、匿名代码块、构造方法
抽象类
定义的时候写上static
抽象方法:只有方法名字,没有方法的实现。
1.不能new抽象类,只能靠子类去实现它。
2.抽象类中可以写普通的方法。
3.抽象方法必须写在抽象类里。
接口(interface)
接口中的所有定义默认是抽象的(public abstract),所以方法可以直接写作:返回类型 方法名();
类可以通过implements接口,实现了接口的类,就需要重写接口中的方法。
接口可以实现多继承。接口不能被实例化,接口中没有构造方法。
内部类
内部类能获得外部类的私有属性