面向对象第三天知识点小结
匿名对象:
格式:new Person(所需参数);
用途:通过匿名对象直接调用成员方法或者使用匿名对象作为方法参数,简化代码结构,节约内存,提高开发效率。
eg1:匿名对象直接调用成员方法
常规创建对象及使用成员方法:
Person person = new Person();
person.sleep();
使用匿名对象使用成员方法:
new Person().sleep();
eg2:匿名对象作为方法参数
public void usePerson(Person person) {}
常规Person类对象作为方法参数:
Person person = new Person();
usePerson(person);
使用匿名对象作为方法参数:
usePerson(new Person());
继承:
继承在开发中是一种抽象的归纳总结思想,剥离通用的属性,通用的方法,简化之后的开发压力。只需要在继承之后,满足个性化的实现即可。
关键字:extends
格式:
class A extends B {
}
A类是B类的一个子类
B类是A类的唯一父类
【Java是一门单继承语言,一个类有且只能继承一个父类】
l例如:四边形类拥有共同的属性和行为,如:拥有四条边
平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性与行为,如:两组对角分别相等。
在上例中,四边形就是平行四边型的唯一父类,平行四边形就是四边形的一个子类
注意:继承之后,子类可以通过继承得到父类中非私有化成员变量,和非私有化成员方法,不可以通过继承得到父类中的私有化成员变量,和私有化成员方法。
多类合作练习:
需求:
引擎类:成员变量:型号、排量
轮胎类:成员变量:产地、尺寸
汽车类:成员变量:汽车名、引擎类对象、键盘类对象
成员方法:展示汽车配置
代码实现:
package com.qfedu.b.homework.car;
/**
* 引擎类
* @author qiuyi
*
*/
public class Engine {
//成员变量
private String model;
private String displacement;
//构造方法
public Engine() {
}
public Engine(String model, String displacement) {
this.model = model;
this.displacement = displacement;
}
//setter与getter方法
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getDisplacement() {
return displacement;
}
public void setDisplacement(String displacement) {
this.displacement = displacement;
}
}
package com.qfedu.b.homework.car;
/**
* 轮胎类
* @author qiuyi
*
*/
public class Wheel {
//成员变量
private String place;
private String size;
//构造方法
public Wheel() {
}
public Wheel(String place, String size) {
this.place = place;
this.size = size;
}
//setter与getter方法
public String getPlace() {
return place;
}
public void setPlace(String place) {
this.place = place;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
}
package com.qfedu.b.homework.car;
/**
* 汽车类
* @author qiuyi
*
*/
public class Car {
//使用Engine类的对象与Wheel类的对象为成员变量
private String name;
private Engine engine;
private Wheel wheel;
//构造方法
public Car() {
}
public Car(String name, Engine engine, Wheel wheel) {
this.name = name;
this.engine = engine;
this.wheel = wheel;
}
//setter与getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public Wheel getWheel() {
return wheel;
}
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
/*
* 汽车配置展示
*/
public void show() {
System.out.println(name + "具有" + engine.getDisplacement() + "的" + engine.getModel() + "引擎");
System.out.println("还具有产自"+ wheel.getPlace() + "的" + wheel.getSize() + "尺寸轮胎");
}
}
package com.qfedu.b.homework.car;
public class Demo {
public static void main(String[] args) {
/*
* 使用匿名对象作为构造方法的参数
*/
//大众高尔夫GTI 发动机型号EA888 排量 2.0L涡轮增压 轮胎尺寸:225/40 R18
Car car = new Car("大众高尔夫GTI", new Engine("EA888", "2.0L涡轮增压"), new Wheel("德国", "225/40 R18"));
car.show();
System.out.println("---------------------- -------------");
//雷克萨斯LX 发动机型号3UR-FE 排量5.7L自然吸气 轮胎尺寸: 285/50 R20
Car car2 = new Car("雷克萨斯LX", new Engine("3UR-FE ", "5.7L自然吸气"), new Wheel("日本", "285/50 R20"));
car2.show();
}
}
输出结果:
大众高尔夫GTI具有2.0L涡轮增压的EA888引擎
还具有产自德国的225/40 R18尺寸轮胎
-----------------------------------
雷克萨斯LX具有5.7L自然吸气的3UR-FE 引擎
还具有产自日本的285/50 R20尺寸轮胎