java封装和继承

java的封装

1.封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

2.封装的好处:隐藏类的实现细节;方便加入控制语句;方便修改实现;只能通过规定的方法访问数据

3.封装的实现:一般看作是使用private词语修饰,当属性使用封装时,我们需要建立set/get方法方便其他类的使用

4.this关键字的使用:在封装中this关键字代表的是当前类的对象,因此该类中的成员变量,构造方法都可以由this调用,例如:调用属性  this.health

      需要注意的是:调用构造方法时,语句为this(),如使用该语句其应放在构造方法中的第一条语句,否则会报错。(解释:因为一个类中可能有不同很多的构造方法,只是参数不同,姓名相同。而在一个构造方法a中使用this代表的是调用另一个构造方法b,而this这个语句要放在这个构造方法a的第一条语句的位置,具体分析详见http://blog.csdn.net/maozhennba3/article/details/49906915     的较详细的解析

5.修饰词的使用范围:

default:本类,同包中使用

public:所有

private:本类中使用

protected:本类、同包、子类中使用


java的继承

1.继承使用的原因:某两个类中具有相同的属性或是行为,为了方便缩小代码量,同时方便代码的修改,我们计划将两个及两个以上的类中相同的属性或是行为进行抽出,组建一个父类,让其他类继承这个类   。因此继承就是代码重用的一种方式,将子类中共有的属性与方法提取放到父类中

2.继承类的写法:使用extends 关键字,同时注意一个类只能继承一个父类

3.子类如果想要访问父类的成员,需要使用super关键词,例如:访问父类的属性super.name    访问父类的方法super.print()   访问父类的构造方法super(),注意此处的语句也需要放在方法中的第一条语句
4.有些父类不能被继承:使用private修饰的;由默认修饰的,但此时子类与父类不在同包
5.构造方法不能被继承或是重写,因为其名字与所在类中的类名相同
6.继承后的实现顺序:父类的属性,父类的构造方法,子类属性,子类的构造方法

例如:


public class Bus extends Car{
Bus(int site){
        setSite(site);
    }
public static void main(String[] args) {
Bus bus = new Bus(20);
    bus.print();

}
}

最后的结果为:



分析:main方法中只有一个打印,为什么会出来两句话,这是因为,这个类执行时,先执行父类的属性、构造方法,这个时候出现了第一句话;之后执行子类中的属性与构造方法,出现了第二句话(size也因此改变成20)


7.继承是可以传递的,一个父类可以有子子孙孙的

8.当父类和子类中出现相同的方法,则在子类中实行方法重写;构造方法因为不能被继承,所以不能被重写

9.父类中的静态方法和静态变量在继承中使用特殊情况,因其使用的时候是属于直接类名.属性名/方法名来进行调用,所以无论是不是继承,另一个类都可以通过此方法来调用静态方法和属性;因此在继承中,他们通常不会被继承也不会被重写,但是子类还是可以通过类名.属性名/方法名来进行调用。有些人称其为隐藏状态

10注意重写的特点:

   子类与父类方法的相同点:方法名相同、参数列表相同

  子类与父类方法的不同点:子类的返回值类型要和父类相同或比父类的返回值类型小、抛出的异常要比父类的异常小或相等;子类的权限修饰符要比父类的权限修饰符大或者相等(public protected default private )

11.super关键字代表的是在子类中调用父类的构造方法或是父类的成员变量、静态变量、静态方法以及被重写的方法,具体使用如下:

     super.成员变量名
     super.成员方法名([参数列表])


12.注意:   静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。

              例如:      该图片中可看到(父类extend)中有staticMethod方法,在子类A中写出这个方法名的时候,如果是重写的话,会出现overload的提示,但是在上面图片中没有重写的提示,因此表明父类的方法在子类中没有被重写,而是被重新定义了,所以静态方法和属性不能被重写

                  不能实现父类的引用可以指向不同子类的对象。指的是,静态属性和方法中 父类的引用指向子类的对象实现的是父类的静态属性及方法

            例如:             图片中的划线部分都代表的是定义一个A类的对象,但是有区别的就是,线1代表的是普通的建立一个类的对象;线2指的是父类的引用指向子类的对象,是属于多态的形式    同时注意对象是哪个类引用的,就先去哪个类找寻方法或是属性,如果该类不存在的话,再去父类中去寻找,因此线2建立的对象由于是父类引用的   所以首先去父类中寻找方法与属性(就算父类中的静态方法是没有方法体的,最后运行也会运行父类的静态方法,显示空白状态,不会去运行子类的方法,因此无法实现多态);而线1 是子类引用的,就先去子类中寻找方法和属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值