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;
  }
}

 

目录
相关文章
|
3月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
82 2
|
3月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
49 3
|
3月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
39 2
|
3月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
38 3
|
24天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
57 6
|
30天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
25 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
2月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
38 4
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2