抽象类、最终类和接口

1.抽象类(abstract class)

随着继承层次中一个个新的子类的定义,类变得越来越具体,而父类则变得更加的通用。类的设计应该保证父类和子类能够共享特性,有时将一个父类设计的非常抽象,以至于他没有具体的实例,这样的类成为抽象类。接口就是彻底的抽象类。

抽象类:如果一个类中包含抽象方法,那么这个类就是抽象类(抽象类不一定有抽象方法)。

  1. 通过把类或者类中的某些方法声明为abstract来表示一个类是抽象类;

  2. 抽象类不能够被实例化;(实例化必须加载类,因为不知道抽象方法的方法体,所以不能被实例化)

  3. 抽象类的子类需要实现父类中的所有的抽象方法,否则该子类也需声明为抽象类;

  4. 抽象类可以实现接口

  5. 抽象类可以继承具体类

  6. 抽象类也可以有**main()**方法;

  7. 构造方法和static方法不能声明为抽象的;

  8. 抽象类中可以具有指向子类对象的对象引用。

  9. 可以有构造方法

  10. 抽象方法必须为public或者protected(因为如果为private,则不能被子类继承),缺省情况下默认为public。

示例代码:

package Test_9;

//基类声明为抽象类
abstract class  Base
{
	//抽象类中可以有其他方法
    public void method()
    {
        System.out.println("Base");
    } 
    
    //抽象方法没有方法体{}
    abstract public void Test();//
}

//子类
class Son extends Base
{
    //子类实现父类的抽象方法
	@Override
	public void Test() {
		// TODO Auto-generated method stub
	}
}


public class Test{

	public static void main(String[] args) {
		//Base base1 = new Base();编译出错,抽象类Base不能够被实例化
		Base base = new Son();
		base.method();
		
	}
}



2.接口(Interface)

定义:某个事物对外提供一些功能的声明。

  1. 接口也是实现了多态,同时接口也弥补了Java单继承的弱点;

  2. 使用接口声明方法和常量,接口中的方法只能是声明,没有具体的实现,但是Java8开始,可以允许接口中的方法有方法体;

  3. 接口中的成员变量默认是:public static final;而且必须赋初值;

  4. 接口中的方法默认是:public abstract

  5. 不能有构造方法

  6. 可以有main函数

package Test_9;

interface MyInterface{
	int i = 1;//必须赋初值
	void add();
}

//demo类实现接口  MyInterface,如果有多个接口被实现用逗号隔开
class Demo implements MyInterface{
	//实现接口的方法
	@Override
	public void add() {
		System.out.println(i);
	}
	
}

public class Test{
	public static void main(String[] args) {
		Demo demo = new Demo();
		demo.add();
	}
}

package test11;
/**
 * 接口可以继承(或扩展)多个接口
 * @author msi
 *
 */

interface A{
	
}

interface B{
	
}

interface C{
	
}
//接口不可以实现接口
interface D implements A{//编译出错
	
}
//,接口与接口之间的关系为继承,既可以单继承,也可以多继承。
interface E extends A,B,C{
	
}
public class interfaceTest {
	
}

public interface Inter {

    /**
     * 成员变量默认为:public static final  x修饰
     */
    public static final int a = 1;

    /**
     * 没有构造函数,不能实例化对象
     */
    //public Inter{}

    /**
     * 方法默认为 public abstract修饰
     */
    public abstract void test();

    /**
     * Java8开始可以拥有自己的方法体
     */
    public static void test2(){
        System.out.println("测试");
    }

    public static void main(String[] args) {
        Inter.test2();
    }

}


3.最终类

  • 加上final修饰的类就是最终类;
  • 加上final的方法就是最终方法;
  • 最终类中可以有最终方法也可以没有(抽象类中可以有抽象方法也可以没有);
  • 最终类不能被继承;最终方法不能被重写。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值