java面向对象编程-继承

1.java只允许单继承
2类可以继承1个抽象,但是内部必须实现
3类可以implmens多个接口,内部必须实现
4子类的构造方法可以通过super()调用父类的构造方法;
5可以安全地向上转型为更抽象的类型
6.

继承

Java使用extends关键字来实现继承
Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类
super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName
在Java中,任何class的构造方法,super第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();
注意:子类在调用父类时,要将super放在最前面.

class Person{
	private String name;
	private int age;
	Person(String _name,int _age){
		this.name=_name;
		this.age=_age;
	}
	String getName(){return this.name;}
	int getAge(){return this.age;}
}
class Student extends Person{
	private int score;
	public Student(String _name,int _age,int _score){
		super(_name,_age);//调用的是父类的构造方法
		this.score=_score;
	}
}

向上转型

一个子类类型安全地变为父类类型的赋值,被称为向上转型(向上转型是安全的)

//父类指向子类 只能调用父类自己的方法 是安全的
Person p=new Student("sikui",25,100);
p.getName();
p.getAge();

向下转型

和向上转型相反,如果把一个父类类型强制转型为子类类型,就是向下转型(向下转型是不安全的)不能把父类变为子类,因为子类功能比父类多,多的功能无法凭空变出来。

向下转型这种方式是错误的,子类指向的方法是父类所没有的,子类的功能比父类多,多的方法无法凭空变出来
Student s=new Person("sikui",25);
s.getName();
s.getAge();
s.getScore();

为了避免向下转型出错,Java提供了instanceof操作符,可以先判断一个实例究竟是不是某种类型:
instanceof实际上判断一个变量所指向的实例是否是指定类型,或者这个类型的子类。如果一个引用变量为null,那么对任何instanceof的判断都为false

Person p = new Person();
System.out.println(p instanceof Person); // true
System.out.println(p instanceof Student); // false

Student s = new Student();
System.out.println(s instanceof Person); // true
System.out.println(s instanceof Student); // true

组合

子类和父类的关系是is,has关系不能用继承。

class Student {
	private int score;
	private Book book;
	public Student(int _score){
		this.score=_score;
	}
	public void setBook(Book _book){
		this.book=_book;
	}
	public int getScore(){ 
	return score;
	}
}
class Book {
	private String book_name;
	private int book_page;
	public void init(){
		System.out.println("初始化书");
	}
	public Book(String _name,int _page){
		this.book_name=_name;
		this.book_page=_page;
	}
	public String getBook_name(){
		return this.book_name;
	}
	public int getBook_page(){
		return this.book_page;
	}
}

Student s=new Student(100);
Book book=new Book("语文",800);
s.setBook(book);//Student中包含book
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值