面向过程 : C语言,以方法为主体,所有的功能都是通过方法之间的调用完成的
面向对象 : java,c++,c#,python,ja
继承:子类拥有父类的属性和方法。(面向对象的三大特征之一)
子类:
父类:(基类、超类) * 格式: extends
vascript 以对象为主体、对象和对象之间的调用。
特点:
1.子类不能继承父类的private属性和方法。
2.类的继承是单继承,但是可以多重继承。
3.一般属性用private修饰,方法用public修饰,所以我们以后开发的工作里卖,主要是继承方法的。
格式: extends
public 子类 extends 父类{
}
使用场景:
如果多个类有共同的属性和方法,那么我们可以吧这些类中共同的属性和方法放到父类中,让这些类(子类)去继承父类,减少代码的重复性。
this.super
都可以代表对象,对象可以调用属性和方法 this.xx super.xx
构造方法里面怎么用。this() super() 代表调用构造方法,并且只能在构造方法里面被调用。
this:
1.对象本身。new的对象就是这个this。
2.this() 调用构造方法,可以有参数。一般只在构造方法里面。
3.如果构造方法里面调用this(),只能放在第一行,否则报错
构造方法补充:
如果类里面没有写构造方法,那么系统默认给一个无参构造方法。
如果类里面存在有参构造方法,那么系统不会给无参构造方法。
super
1.代表的就是父类对象
2.子类的构造方法里面,默认第一句会添加super()。
3.如果子类构造方法手动调用super(),必须放在第一行
抽象类:把具有共同特征的类提取出来就是抽象类
特点:
1.不能实例化对象
2.抽象类就是当爹的。 (抽象类就是用来被继承)
格式:
在创建类的时候,class前面加上abstract
抽象方法:被abstract修饰的方法就叫抽象方法,没有方法体。
如果普通类继承了抽象类,那么抽象类中的抽象方法必须被重写,否则报错
抽象类和普通类的区别:
1.普通类型里面不能有抽象方法,抽象类里面可以有普通方法
2.抽象类里面可以有构造方法,但是不能实例化对象。
方法重写:在继承或者实现关系里面,如果子类和父类的方法名,参数列列表,返回值完全一致,就是方法重写。
1.在继承或者实现关系里面。
2.方法名相同。
3.参数列表
4.返回值
5.修饰符
6.异常
方法重写的目的?
父类的方法不适用子类,那么子类就要考虑重新定义这个方法。
简单小练习:使用继承与封装实现零食商店系统。
package demo02;
//食物类
public class Food {
private String hunger;//饥饱值
private String weight;//食物净重
private String taste;//食物味道
private String variety;//食物品种
public Food() {
}
public Food(String hunger, String weight, String taste, String variety) {
this.hunger = hunger;
this.weight = weight;
this.taste = taste;
this.variety = variety;
}
@Override
public String toString() {
return "Food{" +
"hunger='" + hunger + '\'' +
", weight=" + weight +
", taste='" + taste + '\'' +
", variety='" + variety + '\'' +
'}';
}
public String getHunger() {
return hunger;
}
public void setHunger(String hunger) {
this.hunger = hunger;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getTaste() {
return taste;
}
public void setTaste(String taste) {
this.taste = taste;
}
public String getVariety() {
return variety;
}
public void setVariety(String variety) {
this.variety = variety;
}
package demo02;
//油炸
public class Deepfry extends Food{
public Deepfry() {
}
public Deepfry(String hunger, String weight, String taste, String variety) {
super(hunger, weight, taste, variety);
}
@Override
public String toString() {
return "Deepfry{}";
}
}
package demo02;
//非油炸
public class Nonfried extends Food{
public Nonfried() {
}
public Nonfried(String hunger, String weight, String taste, String variety) {
super(hunger, weight, taste, variety);
}
@Override
public String toString() {
return "Nonfried{}";
}
}
package demo02;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Deepfry deepfry =new Deepfry("","","","方便面,薯片,辣条");
Nonfried nonfried =new Nonfried("","","","草莓干,火腿,青菜");
System.out.println("欢迎来到零食店");
System.out.println("请选择要购买的品种:1. 油炸食品 2. 非油炸食品 ");
int purchase = scanner.nextInt();//购买
switch (purchase){
case 1:
System.out.println("1、原味干脆面 2、黄瓜味薯片 3、辣条");
int choose = scanner.nextInt();
if (choose==1){
System.out.println("恭喜成功购买1袋原味干脆面");
} else if (choose==2) {
System.out.println("恭喜成功购买1袋黄瓜味薯片");
} else if (choose==3) {
System.out.println("恭喜成功购买1袋辣条");
}
break;
case 2:
System.out.println("1.草莓干,2.火腿,3.青菜");
int chooose2 = scanner.nextInt();
if (chooose2==1){
System.out.println("恭喜成功购买1袋草莓干");
} else if (chooose2==2) {
System.out.println("恭喜成功购买1袋火腿");
} else if (chooose2==3) {
System.out.println("恭喜成功购买1袋原青菜");
}
break;
}
}
}