0,面向对象三大特性:继承,封装,多态
1,继承:xx是一种xx
public class Cat extends Animal
子类 父类,基类,超类
作用:简化代码(减少代码冗余)
构造方法:父类对象先与子类对象创建
super():调用父类构造函数
重写:当父类方法不能满足子类需求 方法名相同,参数也得相同,子类重写方法访问修饰符不能比父类更严格
equals hashcode
2,访问修饰符
3,static – 静态的,全局唯一 Math
静态方法中不能出现非静态元素
4,final 不可变的 – 类:不能有子类
属性:必须赋初值,若不赋初值,需要在构造函数中赋初值,一旦赋值, 值不能被改变
方法:不能被重写
局部变量:可以不赋初值。一旦赋值,值不能被改变
【练习题】1.继承:
定义一个名为Vehicles(交通工具)的基类,该类中应包含String类型的成员属性brand(商标)和color(颜色),还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,在控制台显示商标和颜色),并编写构造方法初始化其成员属性。
编写Car(小汽车)类继承于Vehicles类,增加int型成员属性seats(座位),还应增加成员方法showCar(在控制台显示小汽车的信息),并编写构造方法。 编写Truck(卡车)类继承于Vehicles类,增加float型成员属性load(载重),还应增加成员方法showTruck(在控制台显示卡车的信息),并编写构造方法。 在main方法中测试以上各类。
package dyy;
public class Vehicles {
public String brand;
public String color;
public Vehicles(String brand,String color){
this.brand=brand;
this.color=color;
}
public void run(){
System.out.println("我已经开动了");
}
public void showInfo(){
System.out.println("商标:"+brand+" "+"颜色:"+color);
}
}
public class Car extends Vehicles{
public int seats;
public Car(String brand, String color,int seats) {
super(brand, color);
this.seats=seats;
}
public void showCar(){
System.out.println("商标:"+super.brand+" "+"颜色:"+super.color+" "+"座位:"+seats);
}
}
public class Truck extends Vehicles{
public float load;
public Truck(String brand, String color,float load) {
super(brand, color);
this.load=load;
}
public void showTruck(){
System.out.println("商标:"+super.brand+" "+"颜色:"+super.color+" "+"载重:"+load);
}
}
public class Test {
public static void main(String[] args) {
Car c=new Car("路虎","黑色",5);
Truck t=new Truck("东风","蓝色",3000000);
c.showCar();
t.showTruck();
}
}
商标:路虎 颜色:黑色 座位5
商标:东风 颜色:蓝色 载重3000000.0
【练习题】2.继承:
编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。
package dyy;
public class Calculate1 {
public double a;
public double b;
public void add(){
System.out.println(a+b);
}
public void sub(){
System.out.println(a-b);
}
public Calculate1(double a,double b){
this.a=a;
this.b=b;
}
}
public class Calculate2 extends Calculate1 {
public Calculate2(double a, double b) {
super(a, b);
}
public void mul(){
System.out.println(a*b);
}
public void div(){
System.out.println(a/b);
}
}
public class Test {
public static void main(String[] args) {
Calculate1 c1=new Calculate1(2,8);
Calculate2 c2=new Calculate2(16,8);
c1.add();
c2.div();
}
}
10.0
2.0
【练习题】3.包、继承、构造函数
编写一个控制台应用程序,完成下列功能,并回答提出的问题。
1) 创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。
2) 从A继承一个名为C的新类,并在C内创建一个成员变量B。不要为C创建构造函数。
3) 在Main方法中创建类C的一个对象,写出运行程序后输出的结果。
package dyy;
public class A {
public A(){
System.out.println("A");
}
}
package dyy;
public class B {
public B(){
System.out.println("B");
}
}
package dyy;
public class C extends A{
double B;
}
}
package dyy;
public class Test {
public static void main(String[] args) {
C c=new C();
}
}
输出结果为:
A
4) 如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么?
package dyy;
public class C extends A{
double B;
public C(){
System.out.println("C");
}
}
输出结果为:
A
C