第六章 封装和继承

面试题

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 封装和继承相关推荐

  1. java封装继承多态的理解_深入理解Java封装、继承、多态

    一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,常见的实现方式就是:getter.setter. 封装遵循了"开闭原则&qu ...

  2. Java封装、继承 、多态

    封装: 属性私有.get/set 作用:1.提高程序的安全性.保护数据:            2.隐藏代码的实现细节            3.统一接口            4.系统可维护性增加了 ...

  3. java封装,继承和多态

    1 package case8;public class TestPolymorphism {public static void main(String[] args) {// 以多态方式分别实例化 ...

  4. java封装、继承和多态练习题

  5. [Java]--一章看懂java封装、继承、多态

  6. Educoder- 《JAVA从小白到大牛》(第二章)2-3 Java面向对象 - 封装、继承和多态的综合练习

    提示:本文章为个人学习记录,仅供参考学习,禁止转载,支持交流与讨论. 文章目录 第1关:通关任务一 任务描述 相关知识 面向对象思想 封装 继承 `super()`和`this()` 编程要求 测试说 ...

  7. Java面向对象 - 封装、继承和多态的综合练习

    面向对象的三个基本特征: 封装,就是把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏.隐藏实现细节,使得代码模块化. 继承,可以使用现有类的所有功能 ...

  8. 头歌实践实践教学平台:Java面向对象 - 封装、继承和多态的综合练习

    第1关:封装.继承和多态进阶(一) 任务描述 本关任务:按要求编写一个Java应用程序,巩固Java面向对象知识. 相关知识 为了完成本关任务,我们回顾一下前面所学知识:1.面向对象思想 :2.封装: ...

  9. java封装 继承 多态_Java 封装、继承、多态

    Java 封装.继承.多态 1.封装: 封装的理解: 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,并通过该类提供的方法来实现对隐藏信息的操作和访问.(简单的说就是隐藏对象的信息,留出访问的接 ...

  10. java 封装 继承 堕胎_JAVA封装、继承、多态

    封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...

最新文章

  1. php接口调用教程,php接口调用
  2. 【无标题】RestHighLevelClient工具类
  3. 一文看懂Python(五)-----文件篇
  4. 双十一最具性价比机型,Redmi K30S至尊纪念版上手体验
  5. 精美的案例教你如何像杂志一样排版!
  6. C#图片处理之:旋转图片90度的整数倍
  7. jq的each方法之退出循环与继续循环
  8. ganglia分布式监控系统
  9. 数据结构实验三 线性表的链式存储结构及实现
  10. 未来10年,软件开发技术的8个发展趋势
  11. 算法的时间复杂度详解
  12. 【小记】人生若只如初见
  13. 互联网时代,知识付费行业发展空间巨大
  14. android仿qq分组列表效果
  15. weblogic Unable to obtain lock on
  16. 读书笔记-深度学习推荐系统4-推荐与embedding
  17. 业务需求近期准备深度学习下SpringCloud为加深印象提高学习效果故做此笔记以备后面复习查看之用
  18. 元宇宙广告 模式与机遇
  19. 第三类医疗器械经营企业注册条件
  20. STM32简易多级菜单(数组查表法)

热门文章

  1. matlab 数字带圈,LaTeX - 带圈数字
  2. telegram接入微信
  3. 017指北与游移方位惯导系统知识梳理
  4. 美联储加息已成“政治正确” 美元涨势难以阻挡?
  5. 【前端 教程】详解 立即执行函数
  6. zend studio php调试,Zend Studio中如何配置和使用xdebug断点调试工具?
  7. 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
  8. 计算机专业英语词汇pdf,计算机专业英语词汇大全(完美打印版).pdf
  9. 小动物领养网站/宠物救助网站
  10. linux 测试udp端口是否打开,udp端口如何打开?UDP端口测试介绍