Java 面向对象的三大特性

简介: Java 面向对象的三大特性

面向对象编程有三大特征: 封装、继承和多态。

1.封装

1)封装介绍

封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部.程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。

2)封装的理解和好处

隐藏实现细节 : 方法(连接数据库)<--调用(传入参数.)2)可以对数据进行验证,保证安全合理

Person {name, age}

Person p = new Person();

p.name = "iack";

p.age = 1200;

3)封装的实现步骤(三步)

(1)将属性进行私有化private[不能直接修改属性]

     private int Xxx;

(2)提供一个公共的(public)set方法,用于对属性判断并赋值

   public void setXxx(类型 参数名){//Xxx   表示某个属性

 //加入数据验证的业务逻辑

 属性 = 参数名;

 }

(3)提供一个公共的(public)get方法,用于获取属性的值

       public 数据类型 getXxx(){//权限判断,Xxx 某个属性

          return Xxx;

      }

2.继承

1)继承介绍

继承可以解决代码复用 , 让我们的编程更加靠近人类思维 . 当多个类存在相同的属性 ( 变量 ) 和方法时 , 可以从这些类中抽象出父类, 在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过 extends 来声明继承父类即可。画出继承的示意图

2)继承的基本语法

class 子类 extends 父类{}

1)子类就会自动拥有父类定义的属性和方法

2)父类又叫 超类,基类

3)子类又叫派生类

3)super基本介绍

super 代表父类的引用,用于访问父类的属性、方法、构造器

(1)访问父类的属性,但不能访问父类的private属性

(2)super.属性名:访问父类的方法,不能访问父类的private方法super.方法名(参数列表):

(3)访问父类的构造器:

(4)super(参数列表);只能放在构造器的第一句,只能出现一句!

super和this的比较

3.多态

1)多态基本介绍

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

(1)一个对象的编译类型和运行类型可以不一致

(2)编译类型在定义对象时,就确定了,不能改变

(3)运行类型是可以变化的编译类型看定义时 = 号 的左边,运行类型看 = 号的 右边

比如:

Animal animal = new Dog(); [编译类型是Animal,运行类型Dog]

animal = new Cat();[animal 的运行类型变成了 Cat, 编译类型仍然是 Animal)

2)多态注意事项和细节讨论

多态的 前提是: 两个对象(类)存在继承关系

多态的 向上转型

(1)本质:父类的引用指向了子类的对象

(2) 语法:父类类型 引用名 = new 子类类型();

(3)特点: 编译类型看左边,运行类型看右边。

可以调用父类中的所有成员(需遵守访问权限),

不能调用子类中特有成员;

最终运行效果看子类的具体实现!

多态的 向下转型

(1)语法: 子类类型  引用名  (子类类型)父类引用;

(2)只能强转父类的引用,不能强转父类的对象

(3)要求父类的引用必须指向的是当前目标类型的对象

(4)当向下转型后,可以调用子类类型中所有的成员

3)java的动态绑定机制*

Java 重要特性 : 动态绑定机制

java的动态绑定机制: .

(1)当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定

(2)当调用对象属性时,没有动态绑定机制,哪里声明,那里使用

示例:

public class DynamicBinding {
  public static void main(String[] args) {
    //a的编译类型A 运行类型B
    A a=new B();//向上转型
    System.out.println(a.i);//调用对象属性,输出10
    System.out.println(a.sum());//调用对象方法,输出40
    System.out.println(a.sum1());//调用对象方法,输出30
  }
}
class A{//父类
  public int i=10;
  //动态绑定机制
  public int sum(){//父类sum()
    return getI()+10;//
  }
  public int sum1(){//父类sum1()
    return i+10;//
  }
  private int getI() {
    return i;
  }
}
class B extends A{//子类
  public int i=20;
  //动态绑定机制
  public int sum1(){
    return i+10;//
  }
  public int sum(){
    return getI()+20;//
  }
  private int getI() {//子类getI()
    return i;
  }
}

 

目录
相关文章
|
5天前
|
存储 安全 Java
Java面向对象最新超详细总结版!
Java面向对象最新超详细总结版!
24 7
Java面向对象最新超详细总结版!
|
1天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
8 0
|
1天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
15 3
|
1天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
15 2
|
6天前
|
安全 Java 程序员
Java 8新特性之Lambda表达式
【5月更文挑战第5天】 本文将介绍Java 8中的一个重要新特性——Lambda表达式。Lambda表达式是Java 8引入的一种简洁、易读的函数式编程语法,它允许我们将函数作为参数传递给方法,或者作为返回值。通过使用Lambda表达式,我们可以编写更简洁、更易读的代码,提高开发效率。
|
9天前
|
分布式计算 Java API
Java 8新特性之Lambda表达式与Stream API
【5月更文挑战第1天】本文将介绍Java 8中的两个重要特性:Lambda表达式和Stream API。Lambda表达式是一种新的函数式编程语法,可以简化代码并提高可读性。Stream API是一种用于处理集合的新工具,可以方便地进行数据操作和转换。通过结合Lambda表达式和Stream API,我们可以更加简洁高效地编写Java代码。
|
10天前
|
供应链 Java API
Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API和Optional类等。通过对这些新特性的详细解析和应用实例,帮助读者更好地理解和掌握Java 8的新技术。
|
11天前
|
安全 Java API
Java 8新特性概述及其对编程实践的影响
【4月更文挑战第30天】本文将详细讨论Java 8的新特性,包括Lambda表达式、Stream API以及Optional类等,并探讨这些新特性如何改变了Java编程的实践。我们将通过实例代码展示这些新特性的用法,并分析其对提高代码可读性和编写效率的影响。
|
11天前
|
安全 Java API
Java 8新特性深度解析
【4月更文挑战第30天】本文将深入探讨Java 8的新特性,包括Lambda表达式、Stream API、Optional类等,以及这些新特性如何改变我们编写Java代码的方式。
|
11天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
10 0