面向对象——继承
继承的思想其实很好理解,但是里面有些东西需要记忆。
理解,继承可以将之前的类沿袭下来,保留被继承类的功能。
使用方法:class 类名称 extends 父类名称 {
……
}
实例:
package storeName;
//创建父类(也叫超类)
public class storename {
String name;
void printName() {
System.out.println("我是一个商品");
}
}
//创建子类
package storeName;
public class storename2 extends storename {
void printMessage() {
System.out.println("我很贵的!");
}
}
//主函数运行
public class storeTest {
public static void main(String[] args) {
storename2 st = new storename2();
System.out.println(st.name = "黄金");
st.printName();
st.printMessage();
}
}
需要注意,假设有A、B、C三个类,
A可以继承B,同时A也可以继承C(C可以继承A,B可以继承A)但是不能同时继承B和C
(在Python里面是多继承的,有它一套顺序),另外父类私有的成员变量和私有方法不能继承,也所以私有方法不能重写。
A可以继承B,同时B可以继承C,那么A就是孙子了……
关于重写
子类和父类的方法是一样的(包含修饰符和名字以及给定参数等等),重写(覆盖)是不同类之间,而重载是对方法的重新描述,给定参数的类型和个数至少有一点不一样。
在new一个子类之后,如果有同样的基本类型或者重写的方法,先执行子类的数据类型赋值和其方法;若同时存在,如果需要强制执行父类的赋值(成员变量),需要使用
super,可以对比以前的this,专门对类进行表达~~
另外,在重写过程中,子类的权限要关于父类 public > protected > default(不写,写了反而报错) > private
package storeName;
//创建父类(也叫超类)
public class storename {
String name;
int i =6;
void printName() {
System.out.println("我是一个商品");
}
void printJiage( ) {
System.out.println("无价之宝23333");
}
}
//创建子类
package storeName;
public class storename2 extends storename {
int i = 7;
void printMessage() {
System.out.println("我很贵的!");
}
void printJiage( ) {
System.out.println("无价之宝");
}
}
//主函数运行
public class storeTest {
public static void main(String[] args) {
storename2 st = new storename2();
System.out.println(i); \\7
st.printName("无价之宝"); \\"无价之宝"
}
}
继承之抽象类知识点
PS:抽象方法表达方式
public
abstract 返回值类型 方法名称()
抽象类表达方式
abstract class 类名称{}
抽象方法只能放在抽象类,但是抽象类里面不一定要抽象方法;抽象类不允许建立对象,毕竟是抽象的……如果需要建立对象,应该在抽象类的子类里面建立;但是呢,必须重写抽象类中所有的抽象方法,其子类才能创建对象,否则还是抽象的……
这里不得不给出例子来解释,不然以后自己也会绕晕吧……
另外,抽象类一定是父类,修饰词肯定不能是private,final,static
abstract class A{
public abstract void func();
public abstract void func2();
}
class B extends A{//B把A中的两个抽象方法都重写
//B类不再是抽象类,可以实例化为对象,注意,实例化过程没有了关键字abstract,可以补充方法体{}
public void func(){}
public void func2(){}
}
abstract class C extends A{//C含有抽象方法的类一定是抽象类
public void func(){
}
//public abstract void func2();//func2相当于被继承下来
}