话不多说,先上一波脑图~~
java面向对象进阶,主要是对几个关键字进行了解读。
包括this,static,package,import,权限访问,还揭示了java三大特性封装的由来,体现在private修饰属性和方法,隐藏实现细节。
同时提高访问和设置的方法。在设计类时,尽可能保证资源私有,同时提高setter、getter来设置与访问。
也简单地说了权限访问的4个关键字:public、protected、default、private
public,跨包访问,一个项目几十万行代码是很正常的,要有一个个类管理组织,同时还要互相依赖调用,共同完成特定的功能。因此设置方法为public公共,很重要。
但,类里面的资源或者有些方法,要封装起来,隐藏细节,保护资源,得用private修饰,管制权限访问。
下面是一些简单的代码实战,掌握面向对象设计思想,从点滴做起!
1、图书类设计:
package com.water.javaSE;
public class BookTest {
public static void main(String[] args) {
//创建对象时传参,初始化书本标题和页数
Book book = new Book("how to love?", 100);
book.detail();
Book book1 = new Book();
//通过setter方法设置书本页数
book1.setTitle("You are number one!");
book1.setPageNum(50);
book1.detail();
//输入页数大于200,正常显示
Book book2 = new Book("hello java!", 300);
book2.detail();
}
}
/**
* 1. 编写一个类 Book,代表图书。
* 具有属性: 名称(title)、页数(pageNum),其中页数不能少于 200
* 页,否则输出错误信息,并赋予默认值 200。
* 具有方法: 为各属性设置赋值和取值方法。 detail,用来在控制台输出每
* 本图书的名称和页数
* 编写测试类 BookTest 进行测试:为 Book 对象的属性赋予初始值,并调
* 用 Book 对象的 detail 方法,看看输出是否正确
*/
class Book{
private String title; //书本标题
private int pageNum; //书本页数
public Book() {
}
public Book(String title, int pageNum) {
this.title = title;
if (pageNum<200){
System.out.println("书本页数输入少于200,设置为默认值200");
this.pageNum = 200;
}else {
this.pageNum = pageNum;
}
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getPageNum() {
return pageNum;
}
//设置书本页数并校验
public void setPageNum(int pageNum) {
if (pageNum<200){
System.out.println("书本页数输入少于200,设置为默认值200");
this.pageNum = 200;
}else{
this.pageNum = pageNum;
}
}
//打印输出书本信息
public void detail(){
System.out.println("书本标题:"+title+",书本页数:"+pageNum);
}
}
2、静态属性类设置
package com.water.javaSE;
public class StaticTest {
public static void main(String[] args) {
//创建对象时初始化
Person person = new Person("water", 24, '男', "basketball");
System.out.println(person.toString());
//设置静态对象属性
Person.company = "大学堂";
Person.subject = "Math";
System.out.println(person.toString());
}
}
/**
* 2. 通过类描述。
* 具有属性: 姓名,年龄,性别,爱好,公司(都是:牛掰技术公司),学科(都
* 是:Java 学科)。
* 思考:请结合 static 修饰属性进行更好的类设计。
*/
class Person{
private String name;
private int age;
private char sex;
private String hobby;
static String company = "开课吧"; //共用公司
static String subject = "java"; //共用学科
//全参构造,忽略静态属性
public Person(String name, int age, char sex, String hobby) {
this.name = name;
//校验年龄的合法性
if (age<0 || age>150){
System.out.println("输入年龄有误!设置年龄为1");
this.age = 1;
}else{
this.age = age;
}
this.sex = sex;
this.hobby = hobby;
}
public Person() {
}
//打印输出对象信息,包括静态属性
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", hobby='" + hobby + '\'' +
", company=" + company +
", subject=" + subject +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
//设置年龄时,校验其合法性
public void setAge(int age) {
if (age<0 || age>150){
System.out.println("输入年龄有误!设置年龄为1");
this.age = 1;
}else{
this.age = age;
}
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
3、每件衣服都有一个编号
package com.water.javaSE;
public class ClothingTest {
public static void main(String[] args) {
//创建4个对象,每个衣服对象的编码code依次递增
Clothing clothing = new Clothing("tian", "red");
Clothing clothing2 = new Clothing("tian2", "red2");
Clothing clothing3 = new Clothing("tian3", "red3");
Clothing clothing4 = new Clothing("tian4", "red4");
System.out.println(clothing);
System.out.println(clothing2);
System.out.println(clothing3);
System.out.println(clothing4);
}
}
/**
* 3. 通过类描述衣服, 每个衣服对象创建时需要自动生成一个序号值。
* 要求:每个衣服的序号是不同的, 且是依次递增 1 的。
*/
class Clothing{
private int code; //编码
private String brand; //衣服品牌
private String color; //衣服颜色
static int count; //静态变量,记录创建对象的个数
public Clothing(String brand, String color) {
count++; //每次创建对象+1
this.code = count; //将count值赋值给code,保证编码依次递增
this.brand = brand;
this.color = color;
}
public Clothing() {
}
//输出对象信息
@Override
public String toString() {
return "Clothing{" +
"code=" + code +
", brand='" + brand + '\'' +
", color='" + color + '\'' +
'}';
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
面向对象思想很重要,要想掌握,必须得多多实战,多敲代码,多总结思考,才能在往后的工作学习中融会贯通,你会发现,这真的挺不错滴思维方式!