Java中封装、继承、多态

83 阅读4分钟

Java中封装、继承、多态

1.封装(关键字private):

   封装是把过程和数据封闭起来以避免外界直接访问,外界只能通过已定义的接口·实现对数据的访问。

(1)把字段(成员变量)和实现细节隐藏起来不允许外部直接访问。

(2)把方法暴露出来,让方法控制这些成员变量进行安全的访问。

(3)提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰。

提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰。

 (4)命名规范:get和set方法的名称必须符合Java的命名规范,以“get”或“set”开头。

属性名称的首字母要大写

              (5)好处: 类内部的结构可以自由修改。可以对成员变量进行更精准的控制。隐藏信息,实现细节。

2.继承(关键字extends):

(1)子类可以继承父类的属性和方法。

(2)Java只支持单继承,即一个类只能直接继承自一个父类。

(3)子类可以添加自己特有的字段和方法。(继承的主要作用在于在已有基础上(父类已经定义好)继续进行功能的扩充。)

(4)可以通过super关键字在子类中调用父类的构造方法和方法。

注意:父类中无无参数构造方法,有有参数构造方法,子类不能直接创造,需要调用父类有参构造方法。子类需用:public sheep(){super(参数)};

3.多态--方法覆盖(重写)与方法重载

  (1)方法覆盖:子类可以重写继承自父类的方法,即子类定义与父类方法名、参数列表、返回值类型相同的方法。方法的覆盖是动态多态性的表现。

   (2)方法重载:在一个类中,可以定义多个方法名相同但参数列表不同的方法。参数列表的差异可以体现在参数的类型、个数或顺序上。

方法重载可以提供多种不同的方法调用方式,使代码更灵活和易于使用。

注意:Java发生方法覆盖必须满足三个条件:1.发生在父类和子类之间。2.必须具有相同的方法名、相同的参数列表、相同的返回值类型。3..子类重写的方法不能比被重写的方法拥有更低的访问权限。

       class Employee{//员工类(父类)

       String name;//定义name成员变量

       int salary;//定义salary成员变量

       public Employee(){//定义一个无参构造函数

       }

       public Employee(String name,int salary)   {//定义一个含有两个参数的构造函数

              this.name=name;

              this.salary=salary;

       }

       public void printInfo(){//输出员工相关信息

              System.out.println("员工姓名:"+name+"  "+  "员工工资:" +salary);

       }

}

       class Manager extends Employee{//经理类(子类)

              double salary;//隐藏了父类中的salary中的成员变量

              String department;//子类中新的成员变量

              public Manager(){//构造无参函数

              }

              public Manager(String name,double salary,String department){

                     this.name=name;//从父类继承的name属性

                     this.salary=salary;//子类自己的成员变量

                     this.department=department;

              }

              public void printInfo(){//对父类的printInfo()重写,输出管理者信息

              System.out.println("经理姓名:"+name+"  "+"经理部门"+" "+department+"经理工资:"+"  "+salary);

              }

       }

       public class Demo4_14{

              public static void main(String[] args){

                     Employee em=new Employee("张三",2500);

                     em.printInfo();

                     System.out.println("em.salary=" + em.salary);

 

                     Manager mg1=new Manager("李四",6568.5,"采购部");

                     mg1.printInfo();

                     System.out.println("mg1.salary="+mg1.salary);

 

                     Manager mg2=new Manager("王五",7845.2,"市场部");

                     mg2.printInfo();

                     System.out.println("mg2.salary="+mg2.salary);

              }

       }

4.包(关键字package)

        (1)包的定义放在Java源文件的第一行,包的名称一般为小写,包名要有意义。

         例:package lesson4_16;//声明这个类所在包是lesson4_16

              Import java.util.Date;//导入日期类

(2)导入包关键字import

 注意:import位于package语句之后,类定义之前。

5.抽象类和接口:

(1)抽象类(关键字abstract);不能被实例化。

抽象类可以包含抽象方法,抽象方法在方法头后直接跟分号,而一般方法含有以大括号框住的方法体。

子类必须重写抽象方法。

(2)接口:接口使用interface关键字进行声明,表示一组方法的规范。

类可以实现多个接口,但只能继承一个父类。

接口中的方法默认是公共且抽象的。

接口无法被实例化,但是可以被实现。

一个实现接口的类,必须实现接口内所描述的所有方法(抽象方法),否则就必须声明为抽象类。

image.png

6.最终类(关键字final)

   只能让使用者直接使用该类的功能,不能被继承,典型代表String类。

备注:此文章仅是学习用作业,并不专业,有问题欢迎大家指出,谢谢包容。