大家好,欢迎来到IT知识分享网。
封装
面向对象三大特征
1.概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。核心是:
归纳总结
2.好处:提高代码的复用度、安全性,不必关心具体细节,便于开发
JavaBean规范化封装
要求:Java中的所有实体类成员变量全部私有化,最少提供一个无参构造方法,对应成员变量实现setter和getter方法
1. JavaBean规范,是为了后期开发汇总更好的代码适配度,提高代码运行的统一性,能够满足框架的使用
2. JavaBean规范只是一个规范,而且是作为一个基础规范,操作都是可以使用快捷键来完成的!!!
class Person {
// 成员变量全部私有化
private String name;
private int age;
private char sex;
private boolean alive;
//无参构造方法
public Person() {}
//对应成员变量实现setter和getter方法
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public char getSex() {
return this.sex;
}
public boolean isAlive() {
return alive;
}
public void setAlive(boolean alive) {
this.alive = alive;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(char sex) {
this.sex = sex;
}
}
类与类之间的调用(多类合作)
汽车类:
package com.hw.zsy.OctNineteenth;
public class Car {
private String color;
private float speed;
private String brand;
private int tyreTotal;// 轮胎个数
private Engine engine;
public Car() {
}
// public Car(String color, float speed, String brand, int tyreTotal) {
// this.color = color;
// this.speed = speed;
// this.brand = brand;
// this.tyreTotal = tyreTotal;
// }
public Car(String color, float speed, String brand, int tyreTotal) {
this.color = color;
this.speed = speed;
this.brand = brand;
this.tyreTotal = tyreTotal;
this.engine = new Engine("XX", 1.0F);
}
// 飙车方法
public void race() {
if (4 == tyreTotal) {
System.out.println("开着" + color + "的" + brand + "以" + speed + "迈的速度飙车");
} else {
System.out.println("轮胎出问题了,要找修理厂");
}
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public int getTyreTotal() {
return tyreTotal;
}
public void setTyreTotal(int tyreTotal) {
this.tyreTotal = tyreTotal;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
汽车测试类:
package com.hw.zsy.OctNineteenth;
public class CarDemo {
public static void main(String[] args) {
// 准备一辆车
Car car = new Car("红色", 300.0F, "法拉利", 4);
// 飙车
for (int i = 0; i < 10; i++) {
float speed = car.getSpeed() + 2;
car.setSpeed(speed);
car.race();
}
// 如果车的速度太快,达到了320迈。会爆胎
if (car.getSpeed() >= 320.0F) {
// 轮胎少了一个,说明有一个轮胎爆掉了
car.setTyreTotal(3);
}
car.race();
Factory factory = new Factory("滚王子修车厂", "15844517927", "吉安");
Car fixedCar = factory.fix(car);
// 飙车
for (int i = 0; i < 10; i++) {
float speed = fixedCar.getSpeed() + 2;
fixedCar.setSpeed(speed);
fixedCar.race();
}
}
}
引擎类:
package com.hw.zsy.OctNineteenth;
public class Engine {
private String brand; // 型号
private float displacement;// 排量
public Engine() {
}
public Engine(String brand, float displacement) {
this.brand = brand;
this.displacement = displacement;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public float getDisplacement() {
return displacement;
}
public void setDisplacement(float displacement) {
this.displacement = displacement;
}
}
工厂类:
package com.hw.zsy.OctNineteenth;
public class Factory {
private String name;
private String tel;
private String address;
/**
* 修车方法,需要一辆坏车,修好我给你一辆好车
*
* @param car 传入需要被修理的坏车
* @return 返回修好的车
*/
public Car fix(Car car) {
showStart();
Car fixedTyreCar = fixTyre(car);
Car fixedEngineCar = fixEngine(fixedTyreCar);
showEnd();
return fixedEngineCar;
}
/*
* 欢迎
*/
public void showStart() {
System.out.println("欢迎来到" + this.getName() + "修车厂,我们的电话是:" + this.getTel() + ",我们的地址是:" + this.getAddress());
}
/**
* 修理轮胎的方法
*
* @param car 传入一个车
* @return 修好轮胎的车
*/
public Car fixTyre(Car car) {
if (car.getTyreTotal() != 4) {
car.setTyreTotal(4);
car.setSpeed(80.0F);
System.out.println("修车ing");
}
return car;
}
/**
* 修理引擎的方法
* @param car 传入一辆要被修理的车
* @return 返回一个修好引擎的车
*/
public Car fixEngine(Car car) {
// 创建一个新的引擎
Engine newEngine = new Engine("性能怪兽新引擎", 2.0F);
car.setEngine(newEngine);
return car;
}
/*
* 给钱方法
*/
public void showEnd() {
System.out.println("车修好了,给钱钱钱钱钱钱钱钱钱钱钱钱钱钱钱钱钱钱");
}
//无参构造方法
public Factory() {
}
//三参构造方法
public Factory(String name, String tel, String address) {
this.name = name;
this.tel = tel;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
继承
1、概念
把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。
2、格式
关键字:extends
格式:
class Son extends Father {
}
一个孩子只能有一个父亲
一个父亲可以有多个孩子
3、特点
(1)Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。
(2)构造方法只可服务于本类,不可继承,子类执行构造方法前会默认调用父类的无参构造方法。可以通过super()去访问父类的构造方法。
(3)private 修饰的属性和方法不能被继承
注意:子类构造方法执行前默认先执行父类的无参构造方法
4、优点
(1)提高了代码的复用性
(2)提高了代码的维护性
(3)让类与类之间产生了一个关系,是多态的前提
5、缺点
(1)让类的耦合性增强。这样某个类的改变,就会影响到其他和该类相关的类
(2)打破了封装性
6、总结
Java中只有单继承
子类可以继承父类的非私有属性和方法(非private修饰的)
执行子类的构造方法前会默认执行父类的无参构造方法
举例:
extends
public class Demo {
public static void main(String[] args) {
// 创建一个父类对象
Father father = new Father();
// 父类调用父类的属性和方法
father.name = "父";
System.out.println(father.name);
father.game();
System.out.println("-------------");
// 创建一个子类对象
Son son = new Son();
// 子类调用子类的属性和方法
son.age = 16;
System.out.println(son.age);
son.study();
// 子类调用父类的属性和方法(public修饰)
son.name = "子";
System.out.println(son.name);
son.game();
/*
* 子类调用父类private修饰的属性和方法
*
* 报错
* The field Father.suffer is not visible
* The method cook() from the type Father is not visible
*
* 由此可知子类不能调用父类私有化的属性和方法
*/
// son.suffer = 10;
// son.cook();
}
}
public class Father {
public String name;
private int suffer;
public void game() {
System.out.println("下棋");
}
private void cook() {
System.out.println("做饭");
}
}
public class Son extends Father{
public int age;
public void study() {
System.out.println("子类 -- 学习");
}
}
子类构造方法执行前默认先执行父类的无参构造方法
class Father {
String name;
public Father() {
System.out.println("Father's Constrator be performed");
}
}
class Son extends Father {
int age;
public Son() {
System.out.println("Son's Constrator be performed");
}
}
public class TestSon {
public static void main(String[] args) {
Son son = new Son();
}
}
结果:
Father's Constrator be performed
Son's Constrator be performed
【注意】
(1)Son 的构造方法中编译器默认生成 super();
(2)用来调用父类的构造方法,目的是为了初始化父类字段,因为子类可能会用到。
多态
什么是什么
父类引用
引用子类对象
父类和子类有同名的覆盖方法
通过父类引用调用这个重写的方法的时候。多数的话就可以称为多态,单数可以说运行时绑定。
使用多态有什么好处?
类调用者对类的使用成本进一步降低
封装是让类的调用者不需要知道类的实现细节,多态能让类的调用者连这个类的类型是什么都不必知道,只需要知道这个对象具有某个方法即可。因此,多态可以理解成是封装的更进一步,让类调用者对类的使用成本进一步降低。
能够降低代码的“圈复杂度”,避免使用大量的if-else
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/30024.html