Java面向对象基本特征:继承

1、继承

        扩展父类的功能

2、使用extends关键字完成继承

        class 子类  extends 父类{}

package heh;


public class jic {
	public static void main(String[] args) {
	// TODO Auto-generated method stub
	Student stu=new Student();
	stu.setName("zhangsan");
	stu.setAge(19);
	stu.setScore(40);
	stu.tell();
	}
}

	class Person{
		private String name;
		private int age;
		/**
		 * @return the name
		 */
		public String getName() {
			return name;
		}
		/**
		 * @param name the name to set
		 */
		public void setName(String name) {
			this.name = name;
		}
		/**
		 * @return the age
		 */
		public int getAge() {
			return age;
		}
		/**
		 * @param age the age to set
		 */
		public void setAge(int age) {
			this.age = age;
		}
		
	}
	class Student extends Person{
//		private String name;
//		private int age;
		private int score;
		/**
		 * @return the name
		 */
//		public String getName() {
//			return name;
//		}
		/**
		 * @param name the name to set
		 */
//		public void setName(String name) {
//			this.name = name;
//		}
		/**
		 * @return the age
		 */
//		public int getAge() {
//			return age;
//		}
		/**
		 * @param age the age to set
		 */
//		public void setAge(int age) {
//			this.age = age;
//		}
		/**
		 * @return the score
		 */
		public int getScore() {
			return score;
		}
		/**
		 * @param score the score to set
		 */
		public void setScore(int score) {
			this.score = score;
		}
		public void tell(){
			System.out.println("name:"+getName()+"   age:"+getAge()+"  score:"+getScore());
		}
		
	}

Java面向对象基本特征:继承_第1张图片

继承的限制

1、在java中只允许单继承

2、子类不能直接访问父类的私有成员(通过get,set方法设置和得到)

package heh;
class People{
	
	int age;
}

class Worker extends People{
	
}
class Worker2 extends People{
	
}
class PetWorker extends Worker{
	public void tell(){
		System.out.println(age);
	}
}
/**
 * 以下这种继承是错误的,允许多层继承,不允许下面的,就像一个儿子只有一个亲生父亲
class PetWorker extends Worker,People{
	
}
*/
public class ExtDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

Java面向对象基本特征:继承_第2张图片

package heh;
class People{
	
	private int age;

	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}

	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}
	
}

class Worker extends People{
	public void tell(){
		System.out.println("Age:"+getAge());
	}
}


public class ExtDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Worker pe=new Worker();
		pe.setAge(21);
		pe.tell();
	}

}

Java面向对象基本特征:继承_第3张图片

子类对象的实例化

1、在子类对象实例化之前,必须先调用父类中的构造方法,之后调用子类构造方法

package heh;
class Father{
	private String name;
	public Father(){
		System.out.println("父类中的构造方法");
	}
}
class Son extends Father{
	public Son(){
		System.out.println("子类中的构造方法");
	} 
}
public class dd {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Son s=new Son();
		
	}

}

Java面向对象基本特征:继承_第4张图片

Java方法重写与super关键字

1、在继承中,也存在着重写的概念,其实就是子类定义了和父类同名的方法

2、定义:

            方法名称相同,返回值类型相同,参数也同。

3、重写限制:

            被子类重写的方法不能拥有比父类方法更加严格的访问权限

4、访问权限

        private(只能在当前类中进行访问)<default(默认的访问权限,能够在整个包中)<public(整个项目中)

super关键字

    强行执行父类方法的执行(构造方法(方法名和类名一样)中,不用添加,他会自动添加super()关键字)

package heh;
class A{
	public void tell(){
		System.out.println("我是父类方法");
	}
	private void say(){
		
	}
	void print(){
							//default (默认的访问权限)
	}
}
class B extends A{
	
	public void tell(){
		super.tell();
		System.out.println("我重写了tell方法");
	}
	/**以下出错了, 被子类重写的方法不能拥有比父类方法更加严格的访问权限
	private void print(){
		
	}
	*/
}
public class extDemo04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		B b=new B();
		b.tell();
	}

}

Java面向对象基本特征:继承_第5张图片

2、super不一定在重写中使用,也可以表示那些方法时从父类中继承而来的


ava重写与重载的区别

Java面向对象基本特征:继承_第6张图片

你可能感兴趣的:(Java面向对象基本特征:继承)