Day2 面向对象(封装·继承·多态·重载·重写)

来源:互联网 发布:淘宝规则扣分 编辑:程序博客网 时间:2024/06/08 00:49

封装

封装,我理解的字面意思理解就是用东西将一个重要的东西包装起来,让有权利接触此东西的人可以接触到,让没权利的,接触不到,这就是封装的字面意思,而java中的封装呢?差不多也就是这个意思,对一个类使用一定的访问控制符,达到按需限制访问的目的。

1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。

2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

3.封装的基本要求是:把所有的属性私有化,对每个属性提供getter和setter方法,如果有一个带参的构造函数的话,那一定要写一个不带参的构造函数。在开发的时候经常要对已经编写的类进行测试,所以在有的时候还有重写toString方法,但这不是必须的。

继承

1.目的:实现代码的复用。

2.介绍:当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。继承后子类自动拥有了父类的属性和方法,但特别注意的是,父类的私有属性和构造方法并不能被继承。另外子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类的方法,及命名与父类同名的成员变量。有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到protected。

继承案例代码:

//学生类public class Student {    private String name;  //学生姓名    private String sex;   //学生性别    private int age;      //学生年龄    public Student(String name, String sex, int age) {        super();        this.name = name;        this.sex = sex;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}
//学生继承了学生共有的属性:  姓名  性别  年龄public class xuesheng extends Student {    public xuesheng(String name, String sex, int age) {        super(name, sex, age);    }}

多态:多态表示不同的对象可以执行相同的动作,但是要通过它们自己的实现代码来执行。

多态原理:当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,也就是说,虚方法是按照其运行时的类型(而非编译时类型)进行动态绑定调用的。

多态特点:

1、子类以父类的身份出现。

2、子类在工作时以自己的方式来实现。

3、子类以父类身份出现时,子类特有的属性和方法不可以使用。

4、为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚的。这是通过在该成员的返回值类型之前加上vittual关键字实现的。

5、子类可以选择使用override(重写)将父类实现替换为自己的实现。

重载(Overloading)

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

重写(Overriding)

(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

   方法重写又称方法覆盖。

(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方 法将覆盖原有的方法。

   如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

(3)子类函数的访问修饰权限不能少于父类的;

方法重写和重载的实例

public class OverrideTest{    public static void main(String[] args){        A a = new A();        a.p(3);        a.p(20.0);        a.p("ABC");    }}class B {    public void p(double i)    {        System.out.println(i*2);    }}class A extends B{    public void p(String i)//重载   让class A 可以输出字符串     {        System.out.println(i);//重写  覆盖   让class A的输出改变为 i     }    public void p(int i)//重载  让class A 可以输出整形    {        System.out.println(i*5);//重写  覆盖   让class A的输出改变为 i *5    }}
输出结果:  15  40.0  ABC
原创粉丝点击