面向对象进阶时,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 是什么,用在哪里,为什么,怎么用 学习到一个新知识点的时候,多问问上面 ...
随机推荐
- Adaptive Threshold
Adaptive Threshold 1. Otsu's Binarization: Using a discriminant analysis to partition the image into ...
- webpack 5 new features All In One
webpack 5 new features All In One Webpack 5 release (2020-10-10) https://webpack.js.org/blog/2020-10 ...
- Vue Big Changes All in One
Vue Big Changes All in One Vue 重大更新 Vue Versions Vue 版本变更 Vue 3.x Vue 2.x refs vue lifecycle https:/ ...
- how to config custom process.env in node.js
how to config custom process.env in node.js process.env APP_ENV NODE_ENV https://nodejs.org/api/proc ...
- 数据归一化 scikit-learn中的Scaler
1 import numpy as np 2 from sklearn import datasets 3 4 # 获取数据 5 iris = datasets.load_iris() 6 X = i ...
- Python爬虫_百度贴吧
# 本爬虫为爬取百度贴吧并存储HTMLimport requests class TiebaSpider: def __init__(self, tieba_name): self.tieba_nam ...
- idea将文件push之后如何回退
- [信号与系统]傅里叶变换、DFT、FFT分析与理解
目录 一.前言 二.傅里叶变换 1.傅里叶级数 2.傅里叶级数系数求解 2.1.求解方法 2.2.三角函数的正交性 2.3.系数求解过程 2.4.关于傅里叶级数的个人感悟 3.引入复指数 4.总结 三 ...
- the import java.util cannot be resolve
重新配置一下build path 的jre,如果不行的话就重新设置jre(在add library中installed JREs)
- CentOS7 下Docker最新入门教程 超级详细 (安装以及简单的使用)
转载https://blog.csdn.net/wzsy_ll/article/details/82866627 1.为什么使用Docker(本人) 最近总是频繁的在新服务器发布项目, 每次发布都需要 ...