08月18日 星期二 主要是封装

来源:互联网 发布:淘宝卖鲜花 编辑:程序博客网 时间:2024/05/16 14:36

August 18, 2015 9:43 AM

面向对象特征:继承、封装、多态、(抽象)

多态:允许使用父类对象变量引用子类对象,允许一个接口类型变量引用实现类对象。反过来却不行。
一句话描述多态:相同行为,不同的实现。
多态的形成:由于在产生子类对象之前,会先产生父类对象。然后再父类对象基础上扩展子类特有的方法和属性。所以子类对象包含一个完整的父类对象。父类变量指向子类对象,是成立的。因为父类中定义的所有的内容在子类中都可以找到相对应的内容。
但子类不能指向父类对象,子类中定义的内容要多于父类,所以子类中定义的内容在父类中不一定有相对应的内容。
多态调用时,用父类变量指向子类对象,只能调用父类中定义的方法和属性,不能调用子类中特有的方法和属性。
多态调用子类方法时,优先调用子类重写的父类的方法。
如果使用一个父类的变量作为方法的参数,就意味着可以传递任何一个子类对象。

  • Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。
    • 默认的,也称为default,在同一包内可见,不使用任何修饰符。
    • 私有的,以private修饰符指定,在同一类内可见。
    • 共有的,以public修饰符指定,对所有类可见。
    • 受保护的,以protected修饰符指定,对同一包内的类和所有子类可见。
  • 访问控制和继承
    请注意以下方法继承的规则:
    • 父类中声明为public的方法在子类中也必须为public。
    • 父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。
    • 父类中默认修饰符声明的方法,能够在子类中声明为private。
    • 父类中声明为private的方法,不能够被继承。

内部类:在一个类中,在定义一个类,这叫做内部类。
内部类和外部类一样,都要产生class文件。内部类的class文件命名:外部类名$内部类名.class
内部类相当于外部类的属性,内部类对象的产生必须依赖于外部类的产生。

java 封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。1.信息集合 2.信息隐藏

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

私有属性+get、set方法和公有属性属性的区别:
1、私有属性+get/set方法,可以通过删除get或set方法,将属性做成只读或只写属性。但公有属性不行。
2、私有属性在设置属性值时,可以再set方法中加入属性有效性的验证,从而避免属性赋值为无效值。但公有属性不行。

静态块,在类加载时执行,只执行一次
Static修饰符
静态变量:

Static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被成为类变量。局部变量能被声明为static变量。

静态方法:

Static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据。

实例化块,产生一个对象执行一次,在super()之后执行:

public class Student {    static{        System.out.println("Student静态块");    }    public Student() {        super();        System.out.println("创建学生");    }}------------------------------------------------------------------public class J112Student extends Student {    static{        System.out.println("产生J112静态块");    }    {        System.out.println("实例化块");    }    public J112Student() {        super();        System.out.println("产生J112学生");    }}-------------------------------------------------------------------public class Test {    public static void main(String[] args) {        new J112Student();        new J112Student();    }}结果:Student静态块产生J112静态块创建学生实例化块产生J112学生创建学生实例化块产生J112学生

多态:
“`java
package day0818_3多态集合;

public class R {
void 怎么用(电器 dq){
dq.使用电器();
}
public static void main(String[] args) {
R r = new R();
电器[] d = new 电器[5];
d[0] = new 电器();
d[1] = new 电视机();
d[2] = new 电冰箱();
d[3] = new 电饭煲();
d[4] = new 洗衣机();

    for (int i = 0; i < d.length; i++) {        r.怎么用(d[i]);    }}

}

class 电器{
public void 使用电器(){
System.out.println(“我要使用你们了!”);
}
}

class 电冰箱 extends 电器{
public void 使用电器(){
System.out.println(“电冰箱制冷!”);
}
}
class 电视机 extends 电器{
public void 使用电器(){
System.out.println(“看电视节目!”);
}
}
class 洗衣机 extends 电器{
public void 使用电器(){
System.out.println(“洗衣服!”);
}
}
class 电饭煲 extends 电器{
public void 使用电器(){
System.out.println(“电饭煲煮饭!”);
}
}
“`

0 0