java 封装和继承
第六章 封装和继承
面试题
1、描述一下封装、继承
2、构造方法的特点
3、什么是方法重载?
1、封装
属性的封装,可以提高安全性
属性的封装
步骤:
1、字段私有化
2、提供公共接口(方法) 读取getter、写入setter
getter就是get方法,返回值为某一字段值的方法
setter就是set方法,无返回值,可通过传入参数给某字段(属性)赋值
public class Book {private String bookName;private String writer;private int price; public Book(){};public Book(String bookName,String writer,int price){this.price=price;this.bookName=bookName;this.writer=writer;}public Book(StringBuffer bookName,StringBuffer writer,int price){this.price=price;this.bookName=bookName.toString();this.writer=writer.toString();}public void setBookName(String bookName) {this.bookName = bookName;}public String getBookName(){return bookName;} public void setPrice(int price) {this.price = price;}public int getPrice() {return price;} public void setWriter(String writer) {this.writer = writer;}public void setWriter(StringBuffer writer) {this.writer = writer.toString();}public String getWriter(){return writer;}public int upPrice(){return this.price*2;}public int upPrice(int a){if (a==3) {this.price = this.price * 3;return this.price;}elsereturn this.price;}public void show(){System.out.println("书名"+this.bookName+"\t价格"+this.price+"\t作者"+this.writer);} }
public class Prac4 {public static void main(String[] args) {Book book=new Book();Book book1=new Book("海底两万里","无名氏",56);StringBuffer sbfName=new StringBuffer("从百草园到三味书屋");StringBuffer sbfWriter=new StringBuffer("鲁迅");Book b2=new Book(sbfName,sbfWriter,23);b2.setWriter("高尔基");b2.setWriter(sbfWriter);book1.upPrice();book1.upPrice(3);b2.show();book1.show(); } }
2、构造方法
创建对象时需要依次对各属性赋值,调用setter方法,比较繁琐。
故引入构造方法。可在对象创建时完成对属性的赋值(初始化)
构造方法特点
1、方法名和类名一致
2、没有返回值类型
3、在创建对象时调用,new 构造方法(参数) 不能显式调用
public Book(String bookName,String writer,int price){this.price=price;this.bookName=bookName;this.writer=writer;}public Book(){}
1、当未编写构造方法时,系统提供默认的无参构造方法
2、一旦定义了带参的构造方法,那么无参构造方法就会被覆盖。
若要使用无参构造,则需要再次定义。
3、方法重载
1、同一个类中有多个同名方法(返回值类型相同)
2、参数不同(参数的个数不同、类型不同或者顺序不同)
符合以上两点称为方法重载
由此可以引出:构造方法重载、get和set方法重载。只要是方法就能重载。
public void setWriter(String writer) {this.writer = writer;}public void setWriter(StringBuffer writer) {this.writer = writer.toString();}public int upPrice(){return this.price*2;}public int upPrice(int a){if (a==3) {this.price = this.price * 3;return this.price;}elsereturn this.price;}
好处:
1、无需定义不同名字的方法
2、调用方法时,会根据参数的不同,自动调用适合的方法。
4、继承
4.1 概念
继承:子承父业;
需求:人类、学生类、教师类
1、代码冗余;(重复)
2、如何实现代码重用
3、扩展父类的功能
名词:
父类:超类,基类;如何设计:共性的属性和方法,提炼到父类中
子类:派生类;设计独有的属性和方法
4.2 特点
继承:
关键字:extends
语法:子类 extends 父类
定义:子类能够继承父类中非私有的属性和方法,不能继承构造方法,可以增加自己独有的属性和方法
不能被继承的:private修饰的属性或方法,构造方法
特点:
1、 单根性,只能有一个父类
2、传递性:A extends B ; B extends C
满足一个关系才能使用继承:is---a关系
注意:final修饰的类不能被继承,例如:String类
优点:
1、减少代码冗余
2、实现代码重用
3、扩展父类功能
4.3构造方法在继承中的关系
子类对象的实例化需要先实例化父类对象
1、子类会默认调用父类的无参构造方法进行实例化,父类需要提供无参的构造方法;
2、子类可以通过super关键字指定调用父类的某一个构造方法进行实例化
public Student(){//调用父类的构造方法,必须放在第一行super("李四");System.out.println("Student()"); }
示例:
1、人类:学生、教师
2、动物类:狗、猫
3、汽车类:卡车、轿车
4.4 object类
是所有类的祖先类
java中所有类都继承自:object类
4.5方法重写
在有继承关系的类中:
在子类中提供一个跟父类中的方法(原型)相同的方法
重写父类方法需要满足的条件,方法名相同:
1、子类方法的可访问性大于或者等于父类方法的可访问性
2、子类方法的返回值类型与父类中被重写方法的返回值类型一致(或者是子类)
3、子类方法参数列表应该和被重写的方法保持一致
public class SmallStudent extends Student {public void play(){System.out.println("小学生在玩耍");}//覆盖 重写@Overridepublic Student study(){System.out.println("小学生在看图学习");return null;} //借助于编译器进行语法检查:确保符合重写的要求@Overridepublic String toString() {return "名字:"+super.getName()+"年龄:"+super.getAge()+"性别:"+super.getSex();} @Overridepublic boolean equals(Object obj) {//将对象的比较换成对名字的比较SmallStudent smallStudent= (SmallStudent) obj;return this.getName().equals(smallStudent.getName());} }
4.6 继承中的静态和非静态
父类中的可继承的静态属性和方法,直接被子类继承;如果子类中有相同的属性和方法,会隐藏父类中的同名属性和方法
父类中可继承的非静态属性,直接被子类继承;如果子类中有相同的属性的话,会隐藏父类中的同名属性
父类中的非静态方法可以被子类的方法重写
4.7补充:
静态属性、方法和代码块
静态代码块
//静态代码块 static {System.out.print("静态代码块"); }
第一次加载类时调用,只调用一次
实例代码块:
//实例代码块 {System.out.print("实例代码块"); }
每创建一次对象,就调用一次,在构造方法之前调用。
执行过程:
静态代码块--->静态属性、方法------>实例代码块---->构造方法
java 封装和继承相关推荐
- java封装继承多态的理解_深入理解Java封装、继承、多态
一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter.setter. 封装遵循了"开闭原则&qu ...
- Java封装、继承 、多态
封装: 属性私有.get/set 作用:1.提高程序的安全性.保护数据: 2.隐藏代码的实现细节 3.统一接口 4.系统可维护性增加了 ...
- java封装,继承和多态
1 package case8;public class TestPolymorphism {public static void main(String[] args) {// 以多态方式分别实例化 ...
- java封装、继承和多态练习题
- [Java]--一章看懂java封装、继承、多态
- Educoder- 《JAVA从小白到大牛》(第二章)2-3 Java面向对象 - 封装、继承和多态的综合练习
提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论. 文章目录 第1关:通关任务一 任务描述 相关知识 面向对象思想 封装 继承 `super()`和`this()` 编程要求 测试说 ...
- Java面向对象 - 封装、继承和多态的综合练习
面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏.隐藏实现细节,使得代码模块化. 继承,可以使用现有类的所有功能 ...
- 头歌实践实践教学平台:Java面向对象 - 封装、继承和多态的综合练习
第1关:封装.继承和多态进阶(一) 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识. 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 :2.封装: ...
- java封装 继承 多态_Java 封装、继承、多态
Java 封装.继承.多态 1.封装: 封装的理解: 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问.(简单的说就是隐藏对象的信息,留出访问的接 ...
- java 封装 继承 堕胎_JAVA封装、继承、多态
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...
最新文章
- php接口调用教程,php接口调用
- 【无标题】RestHighLevelClient工具类
- 一文看懂Python(五)-----文件篇
- 双十一最具性价比机型,Redmi K30S至尊纪念版上手体验
- 精美的案例教你如何像杂志一样排版!
- C#图片处理之:旋转图片90度的整数倍
- jq的each方法之退出循环与继续循环
- ganglia分布式监控系统
- 数据结构实验三 线性表的链式存储结构及实现
- 未来10年,软件开发技术的8个发展趋势
- 算法的时间复杂度详解
- 【小记】人生若只如初见
- 互联网时代,知识付费行业发展空间巨大
- android仿qq分组列表效果
- weblogic Unable to obtain lock on
- 读书笔记-深度学习推荐系统4-推荐与embedding
- 业务需求近期准备深度学习下SpringCloud为加深印象提高学习效果故做此笔记以备后面复习查看之用
- 元宇宙广告 模式与机遇
- 第三类医疗器械经营企业注册条件
- STM32简易多级菜单(数组查表法)
热门文章
- matlab 数字带圈,LaTeX - 带圈数字
- telegram接入微信
- 017指北与游移方位惯导系统知识梳理
- 美联储加息已成“政治正确” 美元涨势难以阻挡?
- 【前端 教程】详解 立即执行函数
- zend studio php调试,Zend Studio中如何配置和使用xdebug断点调试工具?
- 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
- 计算机专业英语词汇pdf,计算机专业英语词汇大全(完美打印版).pdf
- 小动物领养网站/宠物救助网站
- linux 测试udp端口是否打开,udp端口如何打开?UDP端口测试介绍