Java自学笔记(八)

面向对象——继承


继承的思想其实很好理解,但是里面有些东西需要记忆。

理解,继承可以将之前的类沿袭下来,保留被继承类的功能。

使用方法: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相当于被继承下来
      }

猜你喜欢

转载自blog.csdn.net/weixin_40211315/article/details/79559765
今日推荐