一:封装
1:封装就是吧抽象的数据和对数据的操作封装在一起。通常与修饰符一起使用。
eg: public class demo{
student stu=new student("xiaohua",5)
System.out.println("名字是"+stu.name);
System.out.println("年龄是"+stu.getAge());
}
class student{
public string name;
private int age;
public student(string name,int age) {
this.name=name;
this.age=age;
}
public int getAge(){
return this.age;}
}在demo类中并不能直接访问age ,我们可以定义公共的方法来获取这个对象。
二:为什么需要继承:
继承可以解决代码复用的问题,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些
变量和方法,通过继承后就可以不用定义这些方法和变量。
子类不能继承父类的私有的方法,其他的都可以继承
一个类只能继承一个父类
所有的类都是Object类的子类。
继承不仅可以使用父类的方法和变量。还可以重写父类的方法。
重写的定义:子类和父类的某个方法名称,返回类型,参数都一样,我们称子类方法重写(覆盖)了父类的方法
重写的原因:子类和父类的某些方法索要实现的内容不同。
重写的一些规范:final和static方法和构造方法不能够被重写,子类的访问权限要比父类的高,异常不能比父类
更加宽泛。
方法重载来源:重载来源于构造函数。当我们需要多个构造函数时候就需要用到重载,重载也适应与一般的方法中
重载的规则:既然重载一个方法,这个方法名称必须相同,方法的参数类型,参数个数和参数的顺序至少有一个不
同,方法的返回类型可以不同,方法的修饰访问符也可以不同,但返回类型和修饰访问符不能作为重载
标志。只有参数的类型个数和顺序可以。
被重载的方法可以声明新的异常和更广的异常。
三:多态
多态的定义:通俗的来讲,一个引用在不同情况下的多种状态。
也即是通过指向父类的引用来调用在不同子类中的方法。
多态的作用是消除类型之间的耦合关系。
继承允许将对象视为他们自己本身的类型或其基类类型来处理,允许将多种类型(继承与同一个基类,都可以看作基类的对象)视为同一类型来处理。
多态:方法的调用允许一种类型表现出与其他的类型之间的区别,只要它们是从同一个基类中导出。
多态的简单定义:同一种方法(子类的方法),不同的对象的类型(继承父类的不同的子类对象),得到的不同的结果。
例如:几何形状的一个类Shape s=new Circle();Circle 是Shape的子类
s.draw();在这里调用的是Circle的draw方法。
能够实现这种正确的调用方法,通过的后期绑定(动态绑定:运行时根据对象的类型进行绑定
多态的三个条件:
继承:在多态中必须有继承
向上转型:在多态中,把子类的对象传递给父类,父类隐形的可以调用子类的重写方法(通过动态的绑定实现)
重写:必须覆盖父类中的方法。
多态中关于静态方法和私有方法(final)
私有方法不能够被重写,也不能够被子类使用,顾这种方法不存在多态
静态方法:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.
原因:
1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制就可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。
2). 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
3). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。
5:当一个方法被继承而没有覆盖时,向上转型之后,也只会调用父类的方法。如果进行覆盖,会调用子类的方法。也就是子类的方法优先级高于父类。