封装:

概念:封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问,适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则:将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。主要运用就是JavaBean

代码:创建JavaBean

  1. 1 //创建一个Person类
  2. 2 public class Person {
  3. 3 private String name; //private私有方法修饰变量,把变量封装起来
  4. 4 private int age;
  5. 5 //无参构造方法
  6. 6 public Person() {
  7. 7 }
  8. 8 //有参构造方法
  9. 9 public Person(String name, int age) {
  10. 10 this.name = name;
  11. 11 this.age = age;
  12. 12 }
  13. 13 //set、get方法
  14. 14 public String getName() {
  15. 15 return name;
  16. 16 }
  17. 17
  18. 18 public void setName(String name) {
  19. 19 this.name = name;
  20. 20 }
  21. 21
  22. 22 public int getAge() {
  23. 23 return age;
  24. 24 }
  25. 25
  26. 26 public void setAge(int age) {
  27. 27 this.age = age;
  28. 28 }
  29. 29 //重写toString方法:便于输出格式好看点
  30. 30 @Override
  31. 31 public String toString() {
  32. 32 return "Person{" +
  33. 33 "name='" + name + '\'' +
  34. 34 ", age=" + age +
  35. 35 '}';
  36. 36 }
  37. 37 }

赋值就通过构造方法就可以了

访问控制修饰符范围:
修饰符/类 本类 同一个包中的类 子类 其他类
public 可以
可以 可以 可以
protect 可以 可以 可以 不可以
无访问修饰符 可以 可以 不可以 不可以
private 可以 不可以 不可以 不可以

继承:

概念:就是子类继承父类的属性行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接  访问父类中的非私有的属性和行为。

好处:提高代码的复用性。类与类之间产生了关系,是多态的前提

代码:

  1. 1 //定义父类
  2. 2 public class Fu {
  3. 3 int age =1;
  4. 4 public void show(){
  5. 5 System.out.println("父类的方法");
  6. 6 }
  7. 7 public Fu() {
  8. 8 System.out.println("父类无参构造");
  9. 9 }
  10. 10 public Fu(String name){
  11. 11 System.out.println(name);//父类有参构造要在子类构造方法中通过super关键字赋值
  12. 12 }
  13. 13 }
  14. 14
  15. 15 //定义子类继承父类
  16. 16 public class Zi extends Fu {
  17. 17 int age =2;//定义和父类相同的成员变量
  18. 18 public Zi() {
  19. 19 super("给父类有参构造赋值成功");//通过super关键字给父类有参构造赋值
  20. 20 }
  21. 21 public void show(){//成员方法重名:重写
  22. 22 // super.show();//super关键字调用父类同名方法
  23. 23 System.out.println("子类的方法");
  24. 24 }
  25. 25 public void show1(){
  26. 26 System.out.println(this.age);//this关键字调用本类的成员方法
  27. 27 System.out.println(super.age);//super关键字调用父类的成员方法
  28. 28 }
  29. 29 }
  30. 30
  31. 31 //测试类
  32. 32 //父类构造方法有参数必须要子类的构造方法通过super关键字赋值,不然要报错
  33. 33 public class ExtendsTest {
  34. 34 public static void main(String[] args) {
  35. 35 Zi zi = new Zi();
  36. 36 zi.show();
  37. 37 zi.show1();
  38. 38 }
  39. 39 }

输出结果:

多态:

概念:多态是指同一行为,具有多个不同表现形式。

前提:

1. 继承或者实现【二选一】

2. 方法的重写【意义体现:不重写,无意义】

3. 父类引用指向子类对象【格式体现】

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。

代码:

  1. 1 //父类
  2. 2 public abstract class Animal {
  3. 3 public abstract void eat();
  4. 4 }
  5. 5
  6. 6 //子类Dog继承
  7. 7 public class Dog extends Animal {
  8. 8 @Override
  9. 9 public void eat() {//重写父类的方法
  10. 10 System.out.println("狗吃东西");
  11. 11 }
  12. 12 }
  13. 13
  14. 14 //子类Cat继承
  15. 15 public class Cat extends Animal {
  16. 16 @Override
  17. 17 public void eat() {//子类重写
  18. 18 System.out.println("猫吃东西");
  19. 19 }
  20. 20 public void run(){//子类自己定义的方法
  21. 21 System.out.println("猫跑开了");
  22. 22 }
  23. 23 }
  24. 24
  25. 25
  26. 26 //测试类
  27. 27 public class Test {
  28. 28 public static void main(String[] args) {
  29. 29 Cat cat = new Cat();
  30. 30 Dog dog = new Dog();
  31. 31 // 多态规定,执行的是子类重写的方法,无论之后再多的子类出现,我们都不需要编写showXxxEat方法了,直接使用 showAnimalEat都可以完成。
  32. 32 showAnimaleat(cat);
  33. 33 showAnimaleat(dog);
  34. 34
  35. 35 /*// 向上转型
  36. 36 Animal c =new Cat();
  37. 37 // 向下转型
  38. 38 Cat cat = (Cat) c;
  39. 39 cat.run();*/
  40. 40 // instanceof关键字运用
  41. 41 Animal an =new Cat();
  42. 42 if (an instanceof Cat){
  43. 43 Cat cat1 = (Cat) an;
  44. 44 cat1.eat();
  45. 45 }else {
  46. 46 Dog dog1 = (Dog) an;
  47. 47 dog1.eat();
  48. 48 }
  49. 49 }
  50. 50 public static void showCateat(Cat cat){
  51. 51 cat.eat();
  52. 52 cat.run();
  53. 53 }
  54. 54 public static void showDogeat(Dog dog){
  55. 55 dog.eat();
  56. 56 }
  57. 57 public static void showAnimaleat(Animal animal){
  58. 58 animal.eat();
  59. 59 }
  60. 60 }

面向对象编程的这三大特性,自己肯定总结的不够全面,主要能给我一点印象,如果有错的地方欢迎大家来纠错

Java中的三大特性:封装、继承、多态的更多相关文章

  1. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  2. C++三大特性 封装 继承 多态

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. Java中面向对象三大特性之继承

    1. 继承的概述 继承就是子类继承父类的变量和方法,下面用代码解释一下: class Student {// 定义学生类 String name; int age; void study() { Sy ...

  5. Java中面向对象三大特性之——继承

    继承的概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可. 现实生活中继承:子承父业,用来描述事物之间的关系 代码中继承:就是用 ...

  6. Java中的三大特性 - 超详细篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...

  7. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  8. OOP三大核心封装继承多态

    OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用 ...

  9. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

随机推荐

  1. 计算文件的MD5值和sha256值

    1.计算文件的MD5值. 1)linux系统计算 MD5值:md5sum+文件名 sha256值:sha256su+文件名 2)windows系统计算 MD5值:利用Notepad++工具计算 sha ...

  2. leetcode 最佳买卖股票时机含冷冻期

    这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度. 同 ...

  3. redis缓存穿透,缓存击穿,缓存雪崩

    缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有.这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询).这样请求就会绕过 ...

  4. AECC2018同时中英文切换多开使用,加倍提高你的工作效率

    最近相信不少人已经更新了AECC2018,升级之后第一件重要的事当然是中英文的切换了,要不然工作中很麻烦.对于一直习惯用中文的人来说,在用模板过程中会出现各种表达式报错极其不方便,而对于习惯英文操作朋 ...

  5. springboot中@Mapper和@Repository的区别

    @Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别: 区别: @Repository需要在Spring中配置扫描地址,然后生成 ...

  6. C#多线程---Task实现异步

    一.场景 使用Task来进行累加操作. 二.例子-Task使用 1 using System; 2 using System.Collections.Generic; 3 using System.L ...

  7. (一)响应式web设计。。。freecodecamp笔记

    HTML基础 HTML 的全称是 HyperText Markup Language(超文本标记语言),它是一种用来描述网页结构的标记语言. h1用作主标题,h2用作副标题,还有h3.h4.h5.h6 ...

  8. 统计MySQL数据库硬盘占用量大小

    select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size, concat(truncate(ind ...

  9. SpringBoot博客开发之异常处理

    异常处理: 背景: 最近在搭建属于自己的个人博客(码农小白的执念),自己搭建后端的时候首先考虑的是异常处理.个人也是一边学习一边做,难免有疏漏的地方,希望朋友们在不对的地方提醒下. 技术栈: spri ...

  10. Go版本依赖--版本选择机制

    目录 1. 版本选择机制 2.依赖包版本约定 2.1 Go module 之前版本兼容性 2.2 Go module 之后版本兼容性 3. 版本选择机制 3.1 最新版本选择 3.2 最小版本选择 1 ...