天天看点

Java面向对象的封装与继承

当多个类之间有相同的特征和行为时,就可以将相同的内容提取出来组成一个新类,让原来的这些类继承自新类即可,从而实现原来的这些类吸收新类中成员的效果,此时在原来这些类中只需要编写自己独有的成员即可。

在Java语言中使用extends关键字来表达继承的关系。

编写父类 : 编程实现Person类的封装

public class Person{
     //1.编写私有化成员变量
     private String name;   //用于描述姓名的成员变量
     private int age;       //用于描述年龄的成员变量

     //3.编写无参构造方法和有参构造方法
     //在有参构造方法中调用set成员变量的方法进行合理值的判断
     public Person(){
         System.out.println("Person()");
     }
     public Person(String name, int age){
         setName(name);
         setAge(age);
     }

     //2.提供公有的get成员变量和set成员变量的方法,并在方法体中进行合理性的判断
     public String getName(){
         return name;
     }
     public void setName(String name){
         this.name = name;
     }
     public int getAge(){
         return age;
     }
     public void setAge(int age){
         if(age > 0 && age < 150){
             this.age = age;
         }
         else{
             System.out.println("年龄不合理!!!");
         }
     }
     //编写打印特征的成员方法
     public void show(){
         System.out.println("我是" + getName() + ",今年" + getAge() + "岁了!");
     }
}      

编写子类:实现Student类的封装并继承自Person类

//             子类   继承     父类
public class Student extends Person{

     //1.编写子类自己的私有化成员变量
     private int id; 
     //3.编写子类无参和有参的构造方法
     public Student(){
         super();           //表示调用父类中的无参构造方法,编译器会自动添加
     }
     public Student(String name, int age, int id){
         super(name, age);  //表示调用父类中的有参构造方法
         setId(id); 
     }

     //2.提供公有的get成员变量和set成员变量的方法
     public int getId(){
         return id;
     } 
     public void setId(int id){
         this.id = id;
     }

     //标注,用于明确告诉编译器下面的方法是对父类中方法的重写,若没有构成重写则报错
     @Override  
     public void show(){
         //调用父类中的show()方法就可以打印姓名和年龄了
         super.show();
         System.out.println("我的学号是:"      

编程实现Student类的测试

public class TestStudent{

    public static void main(String[] args){

         Student s1 = new Student();
         s1.show();

         Student s2 = new Student("zhangfei", 30, 1001);
         //当子类中没有重写show()方法时,调用从父类中继承的show()方法
         //当子类中重写show()方法后,则调用子类重写以后的show()方法      

一、封装类步骤

1)、编写私有化成员变量,使用private关键字修饰;

2)、提供公有的get成员变量和set成员变量方法,在方法体中进行合理值的判断;

3)、在构造方法体中调用set成员方法进行合理值的判断;

二、继承

使用extends关键字继承父类

1)、编写子类自己的私有化成员变量

2)、提供公有的get成员变量和set成员变量的方法

如需要使用标注@Override 对父类中成员方法进行重写,super.父类成员方法名(),即调用父类成员方法。

在调用子类自己的成员方法。

3)、编写子类无参和有参的构造方法

在子类的无参构造方法中写上super(),表示调用父类中的无参构造方法,编译器会自动添加;

在子类的有参构造方法中写上形参,并在super()方法中传入形参,表示调用父类中的有参构造方法

再在子类的有参构造方法中调用子类的成员方法。

注意事项:

(1)子类可以继承父类中的成员变量,包括私有成员变量,但是不能直接访问。

子类不可以直接继承父类中的构造方法以及私有成员方法。

(2)构造子类对象是会自动调用父类中的无参构造函数,用于初始化从父类中继承下来的成员变量信息,相当于在子类构造方法中的第一行增加代码:super();

(3)在java语言中只支持单继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类。

(4)只有满足:子类 is a 父类 的逻辑关系才能继承,不能滥用继承。

super关键字和this关键字的比较

1)、基本概念

this关键字用于代表本类的对象;

super关键字用于代表父类的对象;

2)使用方式

使用this.的方式可以访问本类的成员变量和成员方法;

使用super.的方式可以访问父类的成员变量和成员方法;