面向对象进阶时,if语句写错位置
这周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语句写错位置的更多相关文章
- SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交
假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...
- 周末班:Python基础之面向对象进阶
面向对象进阶 类型判断 issubclass 首先,我们先看issubclass() 这个内置函数可以帮我们判断x类是否是y类型的子类. class Base: pass class Foo(Base ...
- Python面向对象进阶和socket网络编程-day08
写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...
- Python面向对象进阶和socket网络编程
写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- day26、面向对象进阶:多态、封装、反射
一.多态 什么是多态: 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机. 即:调用不同类实例化的对象,下的相同的方法,实现的过程不一样 python中的标准类型就是多 ...
- Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)
Python开发[第七篇]:面向对象 详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)> ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- 铁乐学python_day24_面向对象进阶1_内置方法
铁乐学python_day24_面向对象进阶1_内置方法 题外话1: 学习方法[wwwh] what where why how 是什么,用在哪里,为什么,怎么用 学习到一个新知识点的时候,多问问上面 ...
随机推荐
- MDK5生成BIn文件的方法
配置MDK5 生成bin文件的 第一步:方法打开option for Target 第二步:选择 user 第三步:找到After Build/Rebuild 第四步:勾选run,点击文件选择小图标选 ...
- 018-019 NET5_内置容器支持依赖注入+IServiceCollection的生命周期
概念: DI依赖注入: IServiceCollection仅支持构造函数注入 什么是依赖注入? 如果对象A依赖对象B,对象B依赖对象C,就可以先构造对象C,然后传递给对象B,再把对象B传递给A.得到 ...
- DNS & HTTPS bug
DNS & HTTPS bug SSL protocol version bug https://typescript-4.x-tutorials.xgqfrms.xyz/ errors Th ...
- React 17 All In One
React 17 All In One v17.0.1 https://reactjs.org/blog/2020/10/20/react-v17.html https://reactjs.org/b ...
- CSS multi colors circle
CSS multi colors circle <!DOCTYPE html> <html lang="zh-Hans"> <head> < ...
- js repeatify & no for loop
js repeatify & no for loop js repeatify https://www.sitepoint.com/5-typical-javascript-interview ...
- Scalability & Scale-up & Scale-out
Scalability & Scale-up & Scale-out 架构,弹性,伸缩性 Scalability 可扩展性 https://en.wikipedia.org/wiki/ ...
- classnames & React & taro
classnames & React & taro classnames https://www.npmjs.com/package/classnames demo https://g ...
- NGK底层技术如何助力SPC子币VAST高价与安全并行?
NGK近来使用了新的侧链技术推出了新的SPC侧链代币,以及SPC的子币VAST---维萨币. NGK使用去中心化和开源区块链数据分布式协议,不断打造高倍币,力求成为生态建设参与者们所信赖的高倍币孵化器 ...
- 牛市下SPC新空投糖果来了
2021年元旦刚过没几天,比特币就开启了牛市的旅程,比特币涨至三万四千美元,率领众多币种暴涨,一股浓浓的牛市味道来了. 虽然从昨天开始,比特币带领着主流币进行了一波调整,但是只涨不跌的市场是 大家说比 ...