java面向对象编程是一种编程思想,有三大特性,封装,继承,多态。对于一个类而言, 如何封装 呢?继承是父类和子类的关系, 继承关系如何实现的呢?父类和子类继承时的方法体是怎么样的关系呢?多态是多个类之间的关系,类有不同的行为和属性,其他类也有这样的方法和属性,就实现了多态的关系,不同类的多态实现是怎么样实现的呢?
封装:(目的是保护属性不会被随意修改)
谈到封装,java中有三类访问权限修饰符 protected,private,和public,没有加访问修饰符的,一般为包级可见,public 顾名思义,就是所有的类和包都能调用,protected 当前类和同一个包还有子类都可以调用,private则只有当前类可以调用
什么是封装:
设计良好的模块会隐藏所有的实现细节,把它的 API 与它的实现清晰地隔离开来。模块之间只通过它们的 API 进行通信,一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏或封装。因此访问权限应当尽可能地使每个类或者成员不被外界访问。
如何封装?
1.private私有化属性()关键字;
2.提供公共的get set作为入口出口;
3.赋值的时候调用setter,获取值的时候调用getter;
4.如果有有参构造,则赋值时建议调用setter方法,保障逻辑性完全。
封装的好处:
提高数据的安全性。
操作简单。
隐藏了实现。
继承:(目的是把多个公共属性提取到一起作为一个父类)
什么是继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系
继承是类与类的一种关系,是一种“is-a”的关系。
注意:java中的继承是单继承,一个类只能有一个父类
如何继承
class 父类 {
属性;
方法;
}
class 子类 extends 父类 {
}
其他类用extends关键字可以继承父类,可以继承所有属性和方法(私有的属性和方法不可见)
继承的时候,创建子类对象必须先隐式创建父类对象,只要父类有无参构造,创建子类时,会先执行父类无参,如果父类只有有参构造,这时候入,没有无参构造,子类的构造方法就会失效,除非子类用super()显式调用父类有参构造;
super关键字
class Animal {
void eat() {
System.out.println("animal : eat");
}
}
class Dog extends Animal {
void eat() {
System.out.println("dog : eat");
}
void eatTest() {
this.eat(); // this 调用自己的方法
super.eat(); // super 调用父类方法
}
public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();
}
}
final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写
因为所有的构造方法都来自object类
object类是所有类型的父类;
继承的初始化顺序
1、初始化父类再初始化子类
2、先执行初始化对象中属性,再执行构造方法中的初始化。
基于上面两点,我们就知道实例化一个子类,java程序的执行顺序是:
父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化—>子类对象构造方法。