Java学习日记DAY30

1.抽象类
应用场景:在上一篇中的父类Animal,只是规定了一部分子类的属性和方法,但是并不需要创建Animal类型的对象,这时候可以用abstract来修饰该类,避免创建Animal类型的对象。
在这里插入图片描述
2.抽象方法
抽象方法不需要有方法体,比如 public abstract eat(); 子类中必须对该方法进行重写(如果不重写则子类也需要改为抽象类)。
应用场景:当父类规定一些子类必须要有的方法时,就将该方法写为抽象方法。

在这里插入图片描述
在这里插入图片描述
3.接口
对于两个类,不能继承自同一父类,但是拥有相同的方法,这时候需要用到接口。比如,手机和相机都能进行拍照,我们创建两个类,并定义一个拍照的接口来实现上述逻辑。

//接口
package com.liuermeng.photo;

public interface IPhoto {
	public void photo();
	//接口中可以包含常量,默认public static final
	int TEMP=20;
	
    //default:默认方法 可以带方法体 jdk1.8后新增
	//可以在实现类 
	}
	
	//static:静态方法 可以带方法体 jdk1.8后新增
	//不可以在实现类中重写,可以同接口名调用
	static void stop(){
		System.out.println("我是接口中的静态方法");
	}

}
//手机类
package com.liuermeng.photo;

public class Phone implements IPhoto {

	@Override
	public void photo() {
		System.out.println("手机能拍照");
		@Override
	public void connection() {
			// TODO Auto-generated method stub
		System.out.println("我是Phone中的connection");
	}
		
	}

}
//相机类
package com.liuermeng.photo;

public class Camera implements IPhoto{

	@Override
	public void photo() {
		System.out.println("相机能拍照");
		
	}

}

//测试类
package com.liuermeng.test;

import com.liuermeng.photo.IPhoto;
import com.liuermeng.photo.Phone;

public class PhotoTest {

	public static void main(String[] args) {
		IPhoto ip=new Phone();
		ip.photo();

	}

}



输出

手机能拍照

/*接口中抽象方法可以不写abstract关键字
/*访问修饰符默认public
* 当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类
*/
//接口中可以包含常量,默认public static final
3.之前在讲多态时说过,向上造型之后,通过父类的引用只能访问子类重写的父类方法和父类原有的方法。在接口中,并不适用。

package com.liuermeng.photo;

public interface IPhoto {
	public void photo();
	//接口中可以包含常量,默认public static final
	int TEMP=20;
	default void connection() {
		System.out.println("这是IPhoto的connection");
	}

}



package com.liuermeng.photo;

public class Phone extends PhoneFather implements IPhoto {
	
	public static final int TEMP=30;

	@Override
	public void photo() {
		System.out.println("手机能拍照");
		
	}
	@Override
	public void connection() {
		System.out.println("这是手机的connection");
	}

}



package com.liuermeng.test;

import com.liuermeng.photo.IPhoto;
import com.liuermeng.photo.Phone;

public class PhotoTest {

	public static void main(String[] args) {
		IPhoto ip=new Phone();
		ip.photo();
		System.out.println(IPhoto.TEMP);
		ip.connection();
		

	}

}

输出

手机能拍照
20
这是手机的connection

4.当用一个接口的引用指向一个类的实例时,当这个类实现多个接口,而多个接口中含有同一方法时,该实现类会报错,解决办法是在实现类中重写一下该方法,在调用时调用该类重写的方法。另外,当一个类继承自父类并且实现多个接口时,父类和接口中含有同一方法时,实现类会实现父类的方法。再者,上面的情况不能推广到类中的属性,也就是说当父类、接口中存在相同的属性时,实现类就无法区分会报错。
5.接口可以多继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值