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关键字进行声明,表示一组方法的规范。
类可以实现多个接口,但只能继承一个父类。
接口中的方法默认是公共且抽象的。
接口无法被实例化,但是可以被实现。
一个实现接口的类,必须实现接口内所描述的所有方法(抽象方法),否则就必须声明为抽象类。
6.最终类(关键字final)
只能让使用者直接使用该类的功能,不能被继承,典型代表String类。
备注:此文章仅是学习用作业,并不专业,有问题欢迎大家指出,谢谢包容。