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

封装

概念:就是对一个对象的属性或方法私有化,同时提供一些可以被外界访问属性的方法。

  • 封装属性
class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = 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;}
}/*** 封装属性:*  1.将属性私有化,使用private关键字修饰*  2.然后通过set来设置私有属性的值,通过get来获取私有属性的值*  3.封装属性后,无法通过实例化对象访问属性,即 实例化对象.属性名 无效*/
public class Demo {public static void main(String[] args) {Student student=new Student();// student.name; // 无法通过这种方式访问属性或设置属性值student.setName("张三");// 通过setXXX(Val)方法设置属性值System.out.println(student.getName());// 通过getXXX()方法获取属性值}
}

我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。

继承

概念:在已经存在的类的基础上建立新的类,新类的定义可以增加新的属性和方法,也可以使用父类的方法,还可以重写父类的方法,最大的好处就是提高了代码的可复用性。

提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。

继承的三个注意事项:

  • ⼦类拥有⽗类对象所有的属性和⽅法(包括私有属性和私有⽅法),但是⽗类中的私有属性
    和⽅法⼦类是⽆法访问,只是拥有。
class Father {public String name;// 公有属性private String identity;// 私有属性public Father(String name, String identity) {this.name = name;this.identity = identity;}// 共有方法public void say() {System.out.println("我的名字是:" + name);}// 私有方法private void publish() {System.out.println("我的身份是" + identity);}
}class Son extends Father {public Son(String name, String identity) {super(name, identity);}
}public class Demo {public static void main(String[] args) {Son son = new Son("张三", "父亲");son.say();// 访问父类的公有方法System.out.println(son.name);// 访问父类的公有属性son.publish();// 无法访问父类的私有方法son.identity;// 无法访问父类的私有属性,报编译错误:identity' has private access in 'Father'}
}
  • 子类可以拥有自己独有的属性和方法。
class Father {public String name;// 公有属性private String identity;// 私有属性public Father(String name, String identity) {this.name = name;this.identity = identity;}// 共有方法public void say() {System.out.println("我的名字是:" + name);}// 私有方法private void publish() {System.out.println("我的身份是" + identity);}
}class Son extends Father {public String lesson;// 子类独有的属性public Son(String name, String identity) {super(name, identity);}// 子类独有的方法public void learn(){System.out.println("学习"+lesson);}
}public class Demo {public static void main(String[] args) {Son son = new Son("张三", "父亲");son.say();// 访问父类的公有方法System.out.println(son.name);// 访问父类的公有属性// son.publish();// 无法访问父类的私有方法// son.identity;// 无法访问父类的私有属性,报编译错误:identity' has private access in 'Father'son.lesson="语文";son.learn();}
}
  • 子类可以重写父类的方法。
class Father {public String name;// 公有属性private String identity;// 私有属性public Father(String name, String identity) {this.name = name;this.identity = identity;}// 共有方法public void say() {System.out.println("我的名字是:" + name);}// 私有方法private void publish() {System.out.println("我的身份是" + identity);}
}class Son extends Father {public String lesson;// 子类独有的属性public Son(String name, String identity) {super(name, identity);}// 子类独有的方法public void learn() {System.out.println("学习" + lesson);}// 重写父类的方法@Overridepublic void say() {System.out.println("我是子类,我可以重写父类的方法");}
}public class Demo {public static void main(String[] args) {Father father = new Father("张三", "父亲");father.say();Son son = new Son("张三", "父亲");son.say();}
}
/*** 打印结果:* 我的名字是:张三* 我是子类,我可以重写父类的方法*/

多态

概念:指允许不同类的对象对同一消息做出不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

关于多态的解释可以参考这篇博客:https://www.cnblogs.com/mz-lover/p/4786337.html

用比较贴近生活的例子来说,在生活中狗、猫、鸟都会叫,但叫的声音不一样,狗叫“汪汪汪”、猫叫“喵喵喵”、鸟叫“啾啾啾”。

在这里“狗、猫、鸟”就是“不同类的对象”,而“”就是“同一消息”,最后叫出不同的声音“汪汪汪”、“喵喵喵”、“啾啾啾”就是“不同的响应”

多态的三个必要条件:继承(普通类继承、接口实现)、重写父类引用指向子类对象

class Father {public void print() {System.out.println("Father");}
}class Son extends Father {// 继承// 重写方法@Overridepublic void print() {System.out.println("Son");}
}/*** 简单的多态应用*/
public class Demo {public static void main(String[] args) {// 父类引用指向子类对象Father son = new Son();son.print();}
}
/*** 打印结果:* Son*/

多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。

在 Java 中有两种形式可以实现多态:继承(多个⼦类对同⼀⽅法的重写)和接⼝(实现接⼝并覆盖接⼝中同⼀⽅法)。

interface Animal {public void say();
}class Dog implements Animal {@Overridepublic void say() {System.out.println("汪汪汪");}
}class Cat implements Animal {@Overridepublic void say() {System.out.println("喵喵喵");}
}class Bird implements Animal {// 实现接口@Overridepublic void say() {System.out.println("啾啾啾");}
}/*** 使用接口实现多态*/
public class Demo {public static void main(String[] args) {// 父类引用指向子类对象Animal dog = new Dog();dog.say();Animal cat = new Cat();cat.say();Animal bird = new Bird();bird.say();}
}
/*** 打印结果:* 汪汪汪* 喵喵喵* 啾啾啾*/

抽象

默认情况下面向对象有三大特性:封装、继承、多态,但有时候也会问到第四种,就是抽象。

概念:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

Java面试之Java基础5——面向对象的三大特性之封装、继承和多态相关推荐

  1. java面向对象:三大特性:封装,继承,多态

    -----------------------------------面向对象:三大特性:封装,继承,多态 ----------------------------------- 1.什么是类?什么是 ...

  2. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  3. 面向对象的三大特性:封装、继承、多态

    面向对象的三大特性 面向对象的三大特性:封装.继承.多态 封装 封装,成员变量的封装,保证了数据的安全性.封装的好处:过滤了不合理的值.屏蔽内部的赋值过程.让外界不必关注内部的细节 Set方法 1.  ...

  4. 到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?

    Java语言具有的特点:面向对象.跨平台.多线程以及网络编程 1. 和C++的区别 1.1 Java隐蔽了C++的指针,避免指针直接操作,程序更加安全. 1.2 Java类继承只能单继承,避免了C++ ...

  5. php面向对象三大特性,PHP面向对象的三大特性之一封装性

    /*封装性: 面向对象的三大特性之一 *就是把对象的成员(属性,方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节 *public protected *private 私有的, 用这个关键字 ...

  6. php对象的三大特征,关于php中面向对象的三大特征(封装/继承/多态)

    最近在学习php的过程中发现它其实比java的语言要松散很多,而且很多人说上手比较容易,但是智言我个人并不是很认同这样的观点,因为其实java的整个语法规则都非常的有条有理,虽然函数很多,但是至少经常 ...

  7. 面向对象基础、面向对象的三大特征(封装、继承、多态)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 面向对象基础 概述 创建对象和类 类的三种定义方式 类的实例化 类的基本结构 面向对象之封装 概念 封装之对象的相关操作 封 ...

  8. 面向对象的三大特性(封装、继承、多态)

    继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class ...

  9. 八、面向对象的三大特性:封装,继承,多态

    目录 1.封装 2.继承 2.1概述与应用 2.2不可继承性 2.3权限测试 2.4继承-重写(重点,难点) 2.5super与this的使用 3.多态 3.1多态核心 3.2多态直接引用 3.3多态 ...

  10. 面向对象的三大特征:封装 继承 多态

    封装: 封装的概念: 代码的整合, 封装的层次: 函数的封装: 把一组操作整合在一起 类的封装: 把属性和方法整合在一起 结构的封装:根据操作的性质(模型/控制操作/交互视图)进行结构设计封装 ...

最新文章

  1. android edittext html 图片,Android EditText加载HTML内容(内容包含网络图片) -电脑资料...
  2. 两个排序数组的中位数(4.Median of Two Sorted Arrays)
  3. vmware下linux虚拟机传文件解决方案之 xftp
  4. C# winform 窗体怎么隐藏标题栏,不显示标题栏
  5. 基于javaspringboot+mybatis汽车信息管理系统设计和实现
  6. Win系列:VC++编写自定义组件
  7. 配置gitlab环境实现代码管理及Web Hook测试和ldap认证
  8. 大学物理光学思维导图_头晕/眩晕问诊最全思维导图,赶紧收藏!
  9. SolidWorks学习日记
  10. bootdo增加验证码登陆
  11. 福昕PDF转WORD(4.2.0.709)全页数转换补丁
  12. keyshot渲染图文教程_使用keyshot渲染器精确贴图的步骤教程详解
  13. windows自动更新导致:无法访问网络位置*:\Program Files(x86)
  14. 第二模块 商务电子邮件写作技巧
  15. 怎么在安全模式里找计算机用户,安全模式怎么解除
  16. maven中resource配置详解
  17. opencc对文档的繁体中文转换为简体
  18. 如何设计宝贝详情页提高转化率?
  19. No qualifying bean of type xxx found for dependency expected at least 1 bean which qualifies as ...
  20. python实现陷波滤波器、低通滤波器、高斯滤波器、巴特沃斯滤波器

热门文章

  1. python学习之天天向上代码
  2. 实现mysql远程(通过IP地址访问)连接
  3. matlab的特殊字符(上下标和希腊字母等)
  4. 腾讯视频投屏显示无法连接服务器,腾讯视频突然不能投屏怎么解决 腾讯视频突然不能投屏解决方法...
  5. my opencv voyage
  6. authorized_keys 不允许的操作
  7. 杂谈 跟编程无关的事情11
  8. Cleanup failed to process the following paths错误的解决
  9. 【nexys3】【verilog】小设计——拆弹游戏
  10. VSCode更改显示语言-如更改英语为中文或者将中文改为英语