几天前,我们一同学习了Java面向对象三大特征之继承,今天我们将一起来学习两外两个:封装和多态。现在开始吧
一:封装
所谓的封装就是指将类中的属性私有化,对外提供公有的方法来使用即可。“高内聚低耦合”是软件开发过程中对模块的具体要求,如果一个类代表一个业务或模块,则他的属性可以看做是局部变量,来提高内聚性。
具体实现为:
public class Person { private String name;// 私有属性 private int age;// 私有属性 public String getName() {// 提供访问私有属性的方法 return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String name, int age) {//提供带参数的构造方法 super(); this.name = name; this.age = age; } public Person() {// 构造方法 super(); } } |
测试类:
public class Test { public static void main(String[] args) { Person p = new Person("张三",20); // String name = p.name;不能通过这种方法来获得私有变量 // int age = p.age;不能通过这种方法来获得私有变量 String name = p.getName();//通过提供的公有方法访问私有变量 int age = p.getAge(); System.out.println("姓名:"+name); System.out.println("年龄:"+age); } } |
结果:
姓名:张三 年龄:20 |
二:多态
1:什么是多态
多态指得是一个对象,多种状态。这里用到了继承的概念,子类继承父类之后,在使用时可以使用类似于“父类类名 对象名 = new 子类类名()”的形式来使用,但此时应注意以下几条:
(1)发生多态时,只能调用父类的方法,不能调用子类的方法。
父类:
public class Person { private String name;// 私有属性 private int age;// 私有属性 //为说明问题,省略了相应属性的get及set方法 public Person() { super(); // TODO Auto-generated constructor stub } public Person(String name, int age) { super(); this.name = name; this.age = age; } public void study(){ System.out.println("我是父类,我能学习"); } } |
子类:
public class Student extends Person { public Student() { } public void sing() { System.out.println("我是子类,我会唱歌"); } public Student(String name, int age) { super(name, age);// 调用父类的构造方法, } } |
测试类:
public class Test { public static void main(String[] args) { Person p = new Student("小明", 20); p.study();//调用父类的方法没问题 // p.sing();调用子类自己写的方法则不可以 } } |
结果:
我是父类,我能学习 |
(2)发生多态时,如果子类重写了父类的某方法,则当被调用到这个方法时,调用的就是子类的了。
父类同上。
子类:
public class Student extends Person { public Student() { } public void study(){ System.out.println("我是重写的父类方法"); } public Student(String name, int age) { super(name, age);// 调用父类的构造方法, } } |
测试同上。
结果:
我是重写的父类方法 |
(3)发生多态时,如果想要使用子类自己的方法,则需要强制类型转换。
父类同上。
子类同(1)。
测试类:
public class Test { public static void main(String[] args) { Person p = new Student("小明", 20); Student stu = (Student)p;//强制类型转换,让P编程Student的对象 stu.sing();//这时才可以调用子类自己的方法 } } |
结果:
我是子类,我会唱歌 |
可能,刚开始学习这三大特征会有些难度,但随着我们的逐渐深入与理解,但终究会有一天全部掌握,不要灰心,继续加油