这周blog我也不知道要写什么,因为这章我其实学得有点懵,前面那几天我纠结了好久代码,一直不知道原因错在哪里。后来经过询问老师才知道自己调用错了构造方法,相信也有跟我一样的新手会犯这个错误。
我在创建关于介绍书的类的时候,有这么一个规定,如果书的页码少于200页就设置为默认200页。
我的代码是这样写的:
package day05_task;

public class BookTest {

public static void main(String[] args) {
Book b1 = new Book("黑苹果", 120);
Book b2 = new Book("灰栗子", 500);
b1.detail();
b2.detail();
}
}

class Book{ //定义一个类
//Book(){} //构架一个无实参的编译器
Book(String title, int pageNum){ //构建一个有实参的编译器

this.title = title; //赋值 变量给当前属性
this.pageNum = pageNum;
}
//私有化类的属性
private String title;
private int pageNum;
void detail(){
System.out.println("书名:" + getTitle() + "\n" + "页数:" + getPageNum() + "\n");
}
//获取可设置属性变量的权限 通过 public 和set语句
public void setTitle(String title){

this.title = title;
}
public String getTitle(){
return title;
}
public void setPageNum(int pageNum){
if(pageNum < 200)
this.pageNum = 200;
}
public int getPageNum(){
return pageNum;
}

}
大家可有发现什么错误吗?
我把public void setPageNum(int pageNum){
if(pageNum < 200)
this.pageNum = 200;
}
写在了成员方法里,而应该写在构造方法里。这个时候我就有疑问了,因为我是依样画葫芦写的,老师在视频里面也是写在setter里面的,为什么我就不行呢?
后来问了老师后才知道,视频里老师用的是无参构造器,我定义的是有参构造器!!!
所以按照我的思路,正确的代码应该是:
package day05_task;

public class BookTest {

public static void main(String[] args) {
Book b1 = new Book("黑苹果", 100);
Book b2 = new Book("灰栗子", 500);
b1.detail();
b2.detail();
}
}

class Book{ //定义一个类
//Book(){} //构架一个无实参的编译器
Book(String title, int pageNum){ //构建一个有实参的编译器

this.title = title;
if(pageNum < 200) {
this.pageNum = 200;//赋值 变量给当前属性
}else {
this.pageNum = pageNum;
}
}
//私有化类的属性
private String title;
private int pageNum;
void detail(){
System.out.println("书名:" + getTitle() + "\n" + "页数:" + getPageNum() + "\n");
}
//获取可设置属性变量的权限 通过 public 和set语句
public void setTitle(String title){

this.title = title;
}
public String getTitle(){
return title;
}
public void setPageNum(int pageNum){
this.pageNum = pageNum;
}
public int getPageNum(){
return pageNum;
}

}

这周太忙,就写这点点吧。。。

面向对象进阶时,if语句写错位置的更多相关文章

  1. SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交

    假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...

  2. 周末班:Python基础之面向对象进阶

    面向对象进阶 类型判断 issubclass 首先,我们先看issubclass() 这个内置函数可以帮我们判断x类是否是y类型的子类. class Base: pass class Foo(Base ...

  3. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  4. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

  5. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  6. day26、面向对象进阶:多态、封装、反射

    一.多态 什么是多态: 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机. 即:调用不同类实例化的对象,下的相同的方法,实现的过程不一样 python中的标准类型就是多 ...

  7. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  8. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  9. 铁乐学python_day24_面向对象进阶1_内置方法

    铁乐学python_day24_面向对象进阶1_内置方法 题外话1: 学习方法[wwwh] what where why how 是什么,用在哪里,为什么,怎么用 学习到一个新知识点的时候,多问问上面 ...

随机推荐

  1. LeetCode 数组分割

    LeetCode 数组分割 LeetCode 数组怎么分割可以得到左右最大值的差值的最大 https://www.nowcoder.com/study/live/489/1/1 左右最值最大差 htt ...

  2. 高级数据结构之 BloomFilter

    高级数据结构之 BloomFilter 布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter A Bloom filter is a space-effic ...

  3. node.js 如何处理一个很大的文件

    node.js 如何处理一个很大的文件 思路 arraybuffer 数据分段 时间分片 多线程 web workers sevice workers node.js 如何处理一个很大的文件 http ...

  4. svg opacity & fill-opacity & stroke-opacity

    svg opacity & fill-opacity & stroke-opacity opacity = ill-opacity + stroke-opacity https://s ...

  5. c++ 读取ASCII

    void ReadASCII(BYTE* addr, size_t offset, char r[]) { size_t i = 0; char c; while (true) { c = *(add ...

  6. iframe 父子互传消息,父页面滚动,子页面触发父页面高度

    https://blog.csdn.net/qq_38366657/article/details/81538145 // 父页面的js<iframe id='TopHeader' src=&q ...

  7. vueJS+ES6开发移动端APP实战项目笔记

    一.什么是MVVM框架 MV*包括MVC.MVP.MVVM MVVM框架由Model.View.ViewModel构成. Model指的是数据,在前端对应的是JavaScript对象. View指的是 ...

  8. NGK内存爆发式增长,看Baccarat将怎样打造全新的全场景金融生态

    从数字货币抵押借贷业务出发,DeFi已经形成了覆盖全场景的全新金融生态. 可以说,除了信贷等少数对现实世界信息存在较多依赖的实体业务,DeFi已经实现了传统金融业务的全面链上迁移.大多数传统金融行业存 ...

  9. C++算法代码——笨小猴

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1163 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了 ...

  10. LDAP + Samba 安装配置流程

    LDAP + Samba 安装配置 基础环境:Ubuntu18.04 安装samba root@cky:~# apt install samba smbldap-tools -y 查看版本 root@ ...