Java面向对象的三大特征以及理解

Java面向对象的三大特征为:封装、继承和多态,本文说说我对三大特性的理解。

1.封装

Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。下面我举一个简单的封装例子


  
  
  1. public class Person {
  2. private int id;
  3. private String name;
  4. private Person person;
  5. public int getId() {
  6. return id;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. public Person getPerson() {
  12. return person;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public void setPerson(Person person) {
  21. this.person = person;
  22. }
  23. }

在Person类中,定义了三个成员变量,分别为id name person,它们的访问修饰都是private私有的,通过setter和getter方法对这些变量进行设值以及取值。那么这么做有什么好处呢?封装的意义就是增强类的信息隐藏与模块化,提高安全性。封装的主要作用也是对外部隐藏具体的实现细节,增加程序的安全性。

2.继承

Java中的继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。

父类:


  
  
  1. package cn.csu.ksh;
  2. public class Person {
  3. private int a= 1; //父类私有成员变量
  4. private int id;
  5. private String name;
  6. private int age;
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. @Override
  26. public String toString() {
  27. return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
  28. }
  29. public void say() {
  30. System.out.println( "person say..");
  31. }
  32. public void run() {
  33. System.out.println( "person run....");
  34. }
  35. //父类的私有方法
  36. private void show() {
  37. System.out.println( "person show...");
  38. }
  39. }



  
  

子类:


   
   
  1. package cn.csu.ksh;
  2. public class Student extends Person {
  3. @Override
  4. public void say() {
  5. super.say();
  6. }
  7. @Override
  8. public void run() {
  9. super.run();
  10. }
  11. public static void main(String[] args) {
  12. Student stu = new Student();
  13. //stu.a=1;//子类对象对父类的私有成员变量使用报错!
  14. //stu.show();//子类对象调用父类的私有方法,同样报错!
  15. stu.say();
  16. stu.run();
  17. }
  18. }

继承的好处是实现代码的复用以及扩展,子类通过对父类代码的复用,可以不用再定义父类中已经定义的成员变量,方法上直接对父类的方法进行重写实现了扩展。

多态

多态就是指多种状态,就是说当一个操作在不同的对象时,会产生不同的结果。

在Java中,实现多态的方式有两种,一种是编译时的多态,另外一种是运行时多态,编译时的多态是通过方法的重载实现的,而运行时多态是通过方法的重写实现的。

方法的重载是指在同一个类中,有多个方法名相同的方法,但是这些方法有着不同的参数列表,在编译期我们就可以确定到底调用哪个方法。

方法的重写,子类重写父类中的方法(包括接口的实现),父类的引用不仅可以指向父类的对象,而且还可以指向子类的对象。当父类的引用指向子类的引用时,只有在运行时才能确定调用哪个方法。

其实在运行时的多态的实现,需要满足三个条件:1.继承(包括接口的实现)2.方法的重写 3.父类的引用指向子类对象

并且,我们说的多态都是类中方法的多态,属性是没有多态性的。方法的重载我这里就不举例说明了,我说一下运行时的多态。

接口


  
  
  1. package cn.csu.ksh;
  2. public interface Animal {
  3. void shout();
  4. }

实现类


  
  
  1. package cn.csu.ksh;
  2. public class Dog implements Animal{
  3. @Override
  4. public void shout() {
  5. System.out.println( "wangwang...");
  6. }
  7. }

实现类


  
  
  1. package cn.csu.ksh;
  2. public class Cat implements Animal {
  3. @Override
  4. public void shout() {
  5. System.out.println( "miaomiao...");
  6. }
  7. }

测试:


  
  
  1. package cn.csu.ksh;
  2. public class AnimalTest {
  3. public static void main(String[] args) {
  4. //父类的引用指向子类对象
  5. Animal d = new Dog();
  6. animalShout(d);
  7. //父类的引用指向子类对象
  8. Animal c= new Cat();
  9. animalShout(c);
  10. }
  11. public static void animalShout(Animal animal) {
  12. animal.shout();
  13. }
  14. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值