一,多态:
1.面向对象四大基本特性:抽象,封装,继承,多态
抽象,封装,继承是多态的基础。多态是抽象,封装,继承的表现。
2.什么是多态
不同类的对象对同一消息作出不同的响应叫做多态
3.多态的作用
简单来说:解藕。详细点就是,多态是设计模式的基础(既然是基础,那么一些设计模式中肯定有多态的下面三个条件)
4.多态存在的三个条件
有继承关系
子类重写了父类方法
父类引用指向子类对象
5.注意:
因为多态存在必须要有“子类重写父类方法”这个条件,那么下面三种类型的方法没办法表现出多态的特性(因为不能被重写)
static方法:static修饰的方法是属于类的,而不属于实例
final方法:因为被final修饰的方法无法被子类重写
private方法:被private修饰的发那个法对子类不可见,
protected方法:被protected修饰的方法可以被子类见到,也可以被重写,但无法被外部所引用,无法引用,就没有多态
6.多态的分类:
编译时多态,方法的重载
运行时多态,方法的重写
7.分析多态问题的几条原则
比如有一个父类Father,有一个子类Children
(1)向上转型是自动的。Father f=new Children()是自动的,不需要强转
(2)向下转型要强转。即Children c=new Father()是无法编译通过的,必须要Children c=(Children)new Father(),让父类知道它要转成具体哪个子类
(3)父类引用指向子类对象,子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了父类的该方法。
即 Father f=new Children(),f.toString()实际上调用的是Children中的toString()方法
例如:

父类:
public class Father {private double money=100;public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public void usePhone(){System.out.println("使用老年机");}
}

子类:有继承关系,并且重写父类的方法userPhone()
public class Children extends Father {public void usePhone(){System.out.println("继承money:"+getMoney()+"使用智能机");}
}

public class Test {public static void main(String[] args) {Father f=new Children(); //父类的引用指向子类对象。f.usePhone();//其实是调用子类的方法,输出:“继承money:100.0使用智能机”
    }
}

二,封装
一个对象他所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作
封装就是把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法
1.封装的三大好处:
良好的封装能减少耦合
类内部的结构可以自由修改
可以对成员变量更精确的控制
隐藏信息,实现等细节
2.实际应用
(1)好处1:封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。

public class User {private Long id;private String name;private int age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}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;}
}

如果我们需要修改User这个类,把 age改为String 。你只有一处使用了这个类还好,如果你有几十个甚至上百个这样地方,你是不是要改到崩溃。如果使用了封装,我们完全可以不需要做任何修改,只需要稍微改变下Husband类的setAge()方法即可。

public class User {private Long id;private String name;private String age; //改为String类型public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(int age) {this.age = String.valueOf(age);}
}

(2)好处2:可以对成员变量进行更精确的控制。

public class User {private Long id;private String name;private int age;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if(age>150){System.out.println("年龄不符合要求");//输出提示信息}else {this.age = age;}}
}

好处3:例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。

public class User {private Long id;private String name;private Integer sex;private String sexString;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSexString() {if(sex==1){setSexString("男");}else if(sex==0){setSexString("女");}else {setSexString("未知");}return sexString;}public void setSexString(String sexString) {this.sexString = sexString;}
}

三,继承
1.使用继承可以用来复用代码。可以将所有子类的共同属性放入父类中
使用继承记住三句话:
子类拥有父类非private的属性和方法
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
子类可以用自己的方式实现父类的方法
2.构造方法:
首先是通过构造方法来完成对象的初始化,子类的构造方法默认调用父类的构造方法,通过super()方式
(1).父类有默认的构造方法,子类的构造方法默认执行super();调用父类构造方法进行实例化
(2).父类没有默认构造方法(肯定是手写了构造方法),子类构造方法中显示使用super()调用父类构造方法
3.缺点:
父类变,子类必须变
继承是一种强耦合关系

转载于:https://www.cnblogs.com/inspred/p/9526253.html

Java面试题详解一:面向对象三大特性相关推荐

  1. java 面试题详解(转自传智播客张孝祥老师)

    张孝祥正在整理Java就业面试题大全 - 每天进步一点点... ... - CSDN博客2011年11月24日 星期四 设为主页 加入收藏帮助 | 留言交流 | 登录 首 页 阅览室 馆友 我的图书馆 ...

  2. Java面试题 详解 超全200题

    目录 一.类.对象.方法.变量 二.集合类 三.流 四.多线程 五.异常处理 六.JVM 七.HotSpot虚拟机中的7种垃圾收集器 八.Javaweb 一.类.对象.方法.变量 1.知识图谱 2.类 ...

  3. Java面试题 详解 由易到难

    目录 1.   Java 基础 2.   容器 3.   多线程 4.   反射 5.   对象拷贝 6.   Java Web 7.   异常 8.   网络 9.   设计模式 10. Sprin ...

  4. Java面试题详解二:java中的关键字

    一,final 1.被final修饰的类不可以被继承 2.被final修饰的方法不可以被重写 3.被final修饰的变量不可以被改变   重点就是第三句.被final修饰的变量不可以被改变,什么不可以 ...

  5. Java面试题详解三:比较器

    一,Comparable和Comparator 1.Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较. Comparable接口中只 ...

  6. JAVA面试题详解----不知名面试题(8.26更新)

    面试问题------ 问题描述 分析问题----- 代码实现 方式一-----synchronized 方式二-----Lock与LockSupport 方式三-----CountDownLatch与 ...

  7. 【职坐标】java面向对象三大特性(二)——继承详解

    [职坐标]java面向对象三大特性(二)--继承详解 a) 什么是继承? i. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可 b) ...

  8. java 面向对象三大特性之继承 万字详解(超详细)

    目录 前言 : 一.为什么需要继承: 二.什么是继承(Warning : 篇幅较长)? 1.继承概述: 2.子类继承父类之后达到的效果 : ①如何使用继承? ②代码演示 : 3.继承的使用场景: eg ...

  9. java 面向对象三大特性之多态 万字详解(超详细)

    目录 前言 : 一.为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二.什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三.多态的 ...

最新文章

  1. Vivado中set_clock_groups时钟约束的使用
  2. 三句话回答C/C++面试题
  3. python3.6.0安装步骤
  4. PHP常用算法和数据结构示例(必看篇)
  5. fusion 360安装程序的多个实例正在同时运行。_阿里架构师实例讲解——Java多线程编程;详细的不能再详细了...
  6. Qt-Threads和QObjects详解
  7. 留学面试 计算机专业话题,英语面试_美国留学计算机专业详解_沪江英语
  8. Axure RP chrome插件显示已损坏或者无法安装的解决方法
  9. PHP underlying structure
  10. easyui 扩展loading
  11. 微服务业务日志收集方案
  12. python入门之函数结构第二关_Python入门二:函数
  13. 饥饿游戏[The Hunger Games]
  14. 51单片机寻迹小车完整程序
  15. Linux进程通信的试验
  16. 玩转Python之Turtle画五角星
  17. react-native连接夜神模拟器
  18. 东芝硬盘无法打开加密程序
  19. 我的世界1.12.2java下载_我的世界:Minecraft Java版 1.12.2-pre1发布
  20. Revit 二次开发之安装包的制作

热门文章

  1. mysql执行计划缓存在哪_怎么去看懂mysql的执行计划
  2. [Java] 蓝桥杯BASIC-22 基础练习 FJ的字符串
  3. 蓝桥杯 ADV-90 算法提高 输出日历
  4. 蓝桥杯 ADV-166 算法提高 聪明的美食家 java版
  5. matlab 钻石绘制,用MATLAB代码模拟大雕和钻石人单挑
  6. this.$set 更新整个数组_学点算法(二)——有序数组二分搜索算法
  7. Http网络传递参数中文乱码问题解决办法
  8. oracle数据库listener开启和关闭trace文件的方法
  9. Spring mvc Interceptor 解决Session超时配置流程
  10. 基于Dynomite的分布式延迟队列