慢慢学习,然后惊呆所有人(七,抽象类与接口)
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了慢慢学习,然后惊呆所有人(七,抽象类与接口)相关的知识,希望对你有一定的参考价值。
目录
相信大家对前面的文章理解对Java有一定的理解,下面就让我们继续对Java继续学习吧!
什么是抽象类?
如果父类中方法不需要实现(没有方法体),而让子类自己实现的,该方法就可以声明为抽象方法,该类必须是抽象类(简单点来说就是存在abstract关键字修饰)
public abstract Abstract_class{
//声明为抽象类
public abstract void an_abstract_class();
//抽象方法
}
抽象类的使用(抽象类自身无法实例化 !!!)?
当一个类继承抽象类,该类就必须要实现该类的抽象方法(强制子类实现)。
理解误区:(当该类中有抽象方法,则改类一定是抽象类,但当该类是抽象类,类当中的方法不一定全部是抽象方法(抽象方法可以是0个或者多个))
抽象方法:abstract关键字修饰的方法,本质就是强制子类实现。
当一个类继承了抽象类,没有实现继承抽象类的方法,必须将该类声明为抽象类,给其子代实现。
抽象类自身为什么不能实例化?
抽象类自身当中有抽象方法,抽象方法中并没有实现该方法,而是让其子代实现,所以无法实例化,
解决办法:但可以多态方式实例化(本质是实例子类)与使用内部类实现抽象方法。
public class Pet extends Abstract{
public static void main(String[] args) {
Abstract p =new Abstract() {
@Override
public void say() {
System.out.println("匿名内部类实现");
}
};
p.say();
}
@Override
public void say() {
}
}
什么是接口?
Java中的接口是一种特殊的的抽象类,它里面的方法都没有实现,
接口特点:
1,普遍情况下使用public修饰符修饰(其他修饰符也可以修饰,但通常跨包使用,用不到)
2,使用interface关键字进行修饰,
3,接口的属性一般使用静态属性或者常量(默认是public修饰),不写不同的属性,一般写常量或者共同变量
public interface MyInterface{
public static String name="静态属性";
static int age=18;
}
4,接口当中方法全部都是抽象方法,没有方法体;
5,默认方法修饰符都是public ,原因:(继承后子类可以拿到父类方法)
接口的实现(接口的实现需要创建一个类来实现)
创建一个接口类(命名规范:I + 功能名称)
public interface IUserDao{
public void login(String name,String passwd);
void say();
}
创建一个实现类型(命名规范:去掉大写的I),实现类必须实现全部方法或者实现需要的方法,其他方法写成抽象方法
public class UserDao implements IUserDao{
@Override
public void login(String name, String passwd) {
}
@Override
public void say() {
}
}
接口是可以多实现的 !!!
class UserDaoImpl implements UserDao, Icon {
//接口的多实现
@Override
public void login(String name, String passwd) {
}
@Override
public void say() {
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
}
@Override
public int getIconWidth() {
return 0;
}
@Override
public int getIconHeight() {
return 0;
}
}
实现方法二
接口类:命名规范:功能
public interface UserDao{
public void login(String name,String passwd);
void say();
}
//定义接口功能
实现类:命名规范: 实现类名称+Impl
public class UserDaoImpl implements UserDao{
//实现类名称+Impl
@Override
public void login(String name, String passwd) {
}
@Override
public void say() {
}
}
jdk8.0增加的新特性:
1,在接口中存在默认的方法,使用default关键字修饰。
default void say(){
System.out.println("jdk8.0新特性");
}
多态调用方式
public static void main(String[] args) {
UserDao p = new UserDaoImpl();
p.say();
}
2,也可以定义静态方法,此时接口就是一个工具类。
以上是关于慢慢学习,然后惊呆所有人(七,抽象类与接口)的主要内容,如果未能解决你的问题,请参考以下文章