第五章面向对象(中)

  • 1.访问控制修饰符
  • 2.继承
  • 3.组合
  • 4.重载
  • 5.覆盖(覆写)

重点:
封装(java访问控制权限)
继承(定义、子类访问控制权限)
类的组合的实现(与继承的区别)
多态(重载与覆写)

1.访问控制修饰符

Java的访问控制修饰符有哪些?各有什么访问权限?

访问权限控制符:

public(公共访问权限)
protected(包访问权限,继承访问权限)
无访问控制修饰(包访问权限)
private(类内部访问权限)

这些修饰符可以用于
(1)修饰类

 [类修饰符] class 类名( )

(2)修饰类的域变量(属性成员)
(3)修饰类的成员

2.继承

继承通过extends关键字实现

子类对于从父类继承的哪些属性与方法是可见的?请分别写程序进行验证。

子类继承了父类的所有属性和方法, 但只有public、protected的属性和方法在子类是可见的。

子类在继承父类的时候,首先应该满足父类可被访问,例如当子类和父类不在同一个包当中时,父类修饰符必为public;在父类能被访问的前提下,凡是修饰符为public或是protected的父类属性成员或是方法能被子类所访问;private的属性成员或是方法则不能被访问。

实例
1.子类访问父类的protected属性和方法

class Plane{protected String name;public void setName(String _name){name=_name;}public String getName(){return name;}
}
class FighterPlane extends Plane{private int missileNum;public void setNum(int _missileNum){missileNum=_missileNum;}public void fire(){missileNum-=1;}
}
public class Run{public static void main(String[] args){FighterPlane p=new FighterPlane();//子类可以直接访问父类的protected属性和方法p.name="su35";p.setName("f35");System.out.println(p.getName());p.fire();}
}

输出

f35

2.子类访问父类的private属性和方法

class Plane{private String name;public void setName(String _name){name=_name;}public String getName(){return name;}
}
class FighterPlane extends Plane{private int missileNum;public void setNum(int _missileNum){missileNum=_missileNum;}public void fire(){missileNum-=1;}
}
public class Run{public static void main(String[] args){FighterPlane p=new FighterPlane();//p.name="su35";name在Plane中是private 访问控制//子类不能直接访问父类的private属性和方法,可以调用父类的公共方法来间接访问私有属性p.setName("f35");System.out.println(p.getName());p.fire();}
}

输出

f35

3.组合

什么是组合?有什么作用?请举例说明

组合是选用已有类的对象作为,表达的是有一个的包含关系,是类的复用方式,优先于继承。

public class Point{//端点类private int x,y;public Point(int x,int y){this.x=x;this.y=y;}public int getX(){return x;}public int getY(){return y;}
}
class Line{//线段类private Point p1,p2;//两端点Line(Point a,Point b){p1=new Point(a.getX(),a.getY());p2=new Point(b.getX(),b.getY());}
}

多态——是指一个程序中同名的不同方法共存的情况
Java中提供两种多态机制:重载(overloading)与覆写(overriding)

4.重载

什么是重载?有什么作用?请构造各种重载示例
重载:方法名称相同,参数类型或个数不同
在编译器视角来看,方法签名=方法名称+参数类型+参数个数

public class StuManage {public int getScore(){return 3;}public int getScore(int i){return i;}/*public long getScore(int i){return i;}private int getScore(int i){return i;}public static int getScore(int i){return i;}public final int getScore(int i){return i;}*///同名同参数但不同类型返回值的方法不是重载,编译不能通过public int getScore(Integer i){return i;}//可变参数,i实质上是数组int[]    public int getScore(int...i){return 3;}
}
p.getScore(5);调用public int getScore(int i)
p.getScore(1,3,5);调用public int getScore(int ... i)

5.覆盖(覆写)

什么是覆写?有什么作用?覆写父类方法的条件有哪些?请举例说明。

子类对父类的同名方法(方法名称相同,参数相同,返回类型相同)重新进行定义,即在子类中定义与父类中已定义的同名而内容不同的方法。

覆写需满足的条件:
子类的访问修饰符权限应等于或大于父类,不能变小
子类的返回类型能够向上转型成为父类的返回类型
异常也要能向上转型为父类的异常
方法名、参数类型及个数必须严格一致

注意:
覆写只能针对非静态,非final、非构造方法

class Parent {Number getScore(int a) {return new Integer(7);}
}
class Son extends Parent {@Override//所有的覆写方法需注明Number getScore(int b){return new Integer(8);}}public class RunSon{public static void main(String args[]){Son  s = new Son();System.out.println(s.getScore());}
}

在JDK中,很多父类的方法被子类重新覆盖,赋予了不同的含义,如Object类中的boolean equals(Object obj)方法

public boolean equals(Object obj){return this==obj;
}
public class Equals{public static void main(String[] args){String s1="apple";String s2="apple";System.out.println(s1==s2);//trueSystem.out.println(s1.equals(s2));//equals比较的是内容,trueString s3=new String();String s4=new String();System.out.println(s3==s4);//falseSystem.out.println(s3.equals(s4));//初始化的两个对象都为 null,所以是相等,返回 true}
}

输出:

true
true
false
true

从上面例子可以看出来“==”比较的是两个引用的对象是否相等,而equals()方法比较的是两个对象的实际内容
内存分配空间为:

Java第五章——面向对象(二)相关推荐

  1. 尚学堂Java第五章所有题目

    尚学堂Java第五章所有题目 一.选择题 二.简答题 三.编码题 编码题一 编码题二 编码题三 这次的作业有一部分理解的可能不是很透彻,可能不是最优的方法,希望师傅们能给刚入门的我一点建议! 一.选择 ...

  2. 第十五章 面向对象程序设计

    第十五章 面向对象程序设计 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 继承(inheritance): 通过继承联 ...

  3. 第五章 ---- 面向对象(二)

    面向对象二 2.三大特征 2.1.继承性 2.1.1.方法重写 2.1.2.子类实例化过程 2.2.多态性 3.关键字 3.1.super 4.常用类说明 String String概述 字面量方式 ...

  4. 第五章 面向对象(上)

    Java是面向对象的程序设计语言,Java语言提供了定义类.成员变量.方法等最基础的功能,类可被认为是一种自定义的数据类型,可以使用类来定义变量,所有使用类定义的变量都是引用变量,它们将引用到类的对象 ...

  5. 速学堂 JAVA 第五章练习

    速学堂 JAVA300 第五章练习 一.选择题 1.使用权限修饰符(B)修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问.(选择一项) A.p ...

  6. java第五章上机流程图,第五章汇编语言程序设计

    第五章汇编语言程序设计Tag内容描述: 1.1 第5章 汇编语言程序设计 概述 顺序程序设计 分支程序设计 循环程序设计 子程序设计 2 5 1 概述 汇编程序中的语句 编写汇编程序的一般步骤 3 一 ...

  7. java十五章_java:第十五章

    第十五章 字符串1.字符串(String)的定义 String str="内容"; String str=new String(); //内容为null String str=ne ...

  8. mysql第五章项目二_Todo List:Node+Express 搭建服务端毗邻Mysql – 第五章(第1节)

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 万丈高楼平地起,我们的Todo List项目也是越来越结实了.Todo List的前面4章内容都是在为Client端开发, ...

  9. java第五章课后题_黑猴子的家:Java SE 练习题第五章

    尾部都有答案 第五章练习题(继承) (1)下列关于继承优点的叙述正确的是哪几项?(选三项) A.可以创建更为特殊的类型 B.消除重复代码 C.执行效率高 D.便于维护 (2)在子类中调用父类中被覆盖的 ...

最新文章

  1. 【青少年编程】【三级】海底寻宝
  2. 3D目标检测深度学习方法中voxel-represetnation内容综述(三)
  3. 为什么“15。。。”会导致微信ANR?
  4. 共利、共济、共赢 铸就黔南大数据时代丰碑
  5. Python正则表达式之额外补充(7)
  6. 【干货】Linux 网卡绑定的相关知识和技巧
  7. ubuntu更改mysql的编码配置
  8. 高度平衡树 -- AVL 树
  9. 读《移山之道》的收获与疑问(阅读作业之刘明篇)
  10. 进程间的通讯(IPC)方式
  11. 嵌入式linux移植ssh,将SSH移植到arm soc上
  12. python内置模块大全_python知识汇总(异常、内置模块和打包)
  13. [PyTorch] 基于python和pytorch的多项式回归
  14. vbs中对excel的常用操作
  15. EasyUi模糊匹配搜索框combobox
  16. 特拉华大学计算机专业怎么样,最新美国大学CS专业薪资排名,也许这就是你择校的理由!...
  17. Hibernate的4种继承关系
  18. NC65与蓝凌OA审批集成
  19. win10的安装与优化
  20. JS 判断一个字符串是否为日期格式(兼容IOS)

热门文章

  1. 骨传导耳机哪个品牌比较好?骨传导耳机推荐
  2. Dell笔记本、Win10系统开机时没有密码框的一个解决办法。
  3. [天籁之音]《斯卡布罗集市(Scarborough Fair)》
  4. 整理一些比较好的计算机设计理念
  5. iptables mac地址过滤
  6. $.extend()和$.fn.extend()
  7. 安装VMware tools出现警告no default label for /tmp/vmware-block-restore0/tmp_file
  8. Golang匿名结构体结构体嵌套(实战使用)
  9. 买房子不要一次就谈好价格,多砍几次价能省不少钱
  10. 【Java进阶营】2022年Java框架排行榜,谁居榜首?