J学习日志04-面向对象的三大特征



一.继承

面向对象的三大特征:
1. 封装
2. 继承
3. 多态.
继承:继承是通过关键字extends体现的。
继承的格式:

class 类名1 extends 类名2{}

继承要注意的事项:

  1. 千万不要为了减少重复代码而去继承,只有真正存在着继承关系的时候才去继承
  2. 父类私有的成员不能被继承
  3. 父类的构造函数不能被继承
  4. 创建子类对象时默认会先调用父类无参的构造函数
4. 创建子类对象时默认会先调用父类无参的构造函数:
人类 
class Person{	
	String name;
	private	int age;
	public  Person(String name){
		this.name = name;
	}
	public Person(){
		System.out.println("Person类的构造方法被调用了....");
	}
	public void eat(){
		System.out.println(name+"在吃饭...");
	}
}

学生类
class Student extends Person { 
	int num; //学号
	public Student(){
		System.out.println("Student类的构造方法被调用了....");
	}
	public void study(){
		System.out.println(name+"good good study , day day up");
	}	
}

class Demo7 
{
	public static void main(String[] args) 
	{
		Student s = new Student();
	}
}
输出:Person类的构造方法被调用了....
Student类的构造方法被调用了....

java是单继承

一个类最多只能有一个直接的父类。但是有多个间接的父类。

class Ye{
	String name;
}
class Fu extends Ye{
}
//ye是zi的间接父类
class  Zi extends Fu{
}
class Demo6 {
	public static void main(String[] args) {
		Zi zi =new Zi();
		zi.name = "狗娃";
	}
}

二.super关键字

super关键字代表了父类空间的引用
super关键字的作用:

  1. 子父类存在着同名的成员(变量或方法)时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
  2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

super关键字调用父类构造方法要注意的事项:

1.如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句;
2. super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句;
3. super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。

super关键字与this关键字的区别:

  1. 代表的事物不一致:
1. super关键字代表的是父类空间的引用。	
2. this关键字代表的是所属函数的调用者对象。
  1. 使用前提不一致:
1. super关键字必须要有继承关系才能使用。
2. this关键字不需要存在继承关系也可使用
  1. 调用构造函数的区别:
1. super关键字是调用父类的构造函数。
2. this关键字是调用本类的构造函数
class Fu{		
	int x = 10;
	String name;
	public Fu(){
		System.out.println("Fu类无参的构造方法..");
	}
	public Fu(String name){
		this.name = name;
		System.out.println("Fu类带参的构造方法..");
	}
	public void eat(){
		System.out.println("小头爸爸吃番薯..");
	}
}

class Zi extends Fu{	
	int x = 20; 
	int num;	
	public Zi(String name,int num){
		super(name); //指定调用了父类带参的 构造方法...
		//this(); // 调用本类无参构造方法..
		//super(); //指定调用了父类无参构造方法。。。
		System.out.println("Zi类带参的构造方法..");
	}
	public Zi(){
		System.out.println("Zi类无参的构造方法..");
	}
	public void print(){
		System.out.println("x = " +super.x);
	}
	public void eat(){
		System.out.println("大头儿子吃龙虾..");
	}
}

class Demo9 {
	public static void main(String[] args) 
	{
		Zi z = new Zi("狗娃");	
	}
}

注意:以下编译会报错:

class Fu{
	String name;
	public Fu(String name){
		this.name=name
	}
	public void eat(){
		System.out.println(name+'吃饭')
	}
}

class Zi extends Fu{
	String num;
}

class Demo10{
	public static void main(String[] args){
		Zi z=new Zi();
	}
}
**原因:new Zi会调用Zi类的无参构造方法,由于Zi继承于父类,那么首先会调用父类的
无参构造方法(因为没有子类没有指定调用父类哪个方法),而父类没有无参构造方法。
所以报错。**

三.方法重写

方法重写的前提: 必须要存在继承的关系。
方法的重写: 子父类出了同名的函数,这个我们就称作为方法的重写。
什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。
方法重写要注意的事项:

1.方法重写时,方法名与形参列表必须一致
2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符
3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型
4.方法重写时,子类抛出的异常类型要小于或者等于父类抛出的异常类型Exception(最坏)RuntimeException(小坏)

方法的重载:在一个类中 存在两个或者两个 以上的同名函数,称作为方法重载
方法重载的要求:

1.函数名要一致
2.形参列表不一致(形参的个数或形参 的类型不一致)
3.与返回值类型无关

四.练习

题目:
使用java描述一下普通的学生、 java基础班的学生、 就业班的学生。
所有的学生都会学习。但是学习的内容不一样。
普通 的学生: 马克思列宁主义。
基础班的学生:学习的是 javase。
就业班学生: javaee+android.

//普通的学生类
class Student{
	String name;
	//构造函数
	public Student(String name){
		this.name = name;
	}	
	public void study(){
		System.out.println(name+"学习马克思列宁主义");
	}
}

//基础班的学生是属于学生中一种
class BaseStudent extends Student{
	public BaseStudent(String name){
		super(name);//指定调用父类构造函数
	}
	//重写
	public void study(){
		System.out.println(name+"学习javase..");
	}
}

//就业班学生 也是属于普通学生中一种
class WorkStudent extends Student{	
	//构造 函数
	public WorkStudent(String name){
		super(name);
	}
		//重写
	public void study(){
		System.out.println(name+"学习javaee+android..");
	}
}

class Demo11 
{
	public static void main(String[] args) 
	{	
		BaseStudent s = new BaseStudent("居东东");
		s.study();
		//创建一个就业班的学生
		WorkStudent w = new WorkStudent("张三");
		w.study();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值