`
incyanggan
  • 浏览: 32747 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java菜鸟学习笔记--面向对象篇(十一):&abstract方法/类

 
阅读更多

什么是抽象函数,抽象类?

在java中,含有抽象方法的类称为抽象类,同样不能生成对象。

凡是包含纯虚函数的类都是抽象类。

抽象类是不完整的,并且它只能用作基类。它与非抽象类的不同:

1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。

2、允许(但不要求)抽象类包含抽象成员。

3、抽象类不能被密封。

当从抽象类派生非抽象类时,这些非抽象类必须具体实现所继承的所有抽象成员,从而重写那些抽象成员。





抽象函数的格式


  • 只有函数的定义,没有函数体的函数
  • abstract void fun();


1.在一个普通类中定义抽象函数?

class Home{


	String where;
	 
	//1.定义一个抽象方法,编译能否通过?
	abstract void gohome();	
	/*输出
	Test.java:1: error: Home is not abstract and does not override abstract method gohome() in Home

	*///说明:说明抽象方法必须声明在抽象类内

}
public class Test{

	public static void main(String[] args){		

	}
}




抽象类的规则



  1. 使用abstract定义的类称为抽象类
  2. 抽象类不能生成对象
  3. 如果一个类中包含抽象函数,那么这个类必须声明为抽象类
  4. 一个类中没有抽象函数,也可以声明为抽象类
  5. 抽象类是用来当爹的,用于被继承的,他的子类可以生成对象
  6. 抽象类可以有构造函数,是为子类调用时候准备的



1.尝试生成抽象类的对象?

//2.尝试用抽象类生成对象
abstract class Home{


	String where;
	abstract void gohome();	

}
public class Test{

	public static void main(String[] args){		

		//创建抽象类对象
		Home yang=new Home();
		/*输出:
		Test.java:14: error: Home is abstract; cannot be instantiated
		Home yang=new Home();
		          ^
		1 error		
		*///原因:抽象类内的方法是没有方法体的(没有实现部分),假设能创建对象,那么对象调用方法肯定出错
		
		
	}
}

2.通过继承再生成对象?

//2.尝试用抽象类生成对象
abstract class Home{


	String where;
	abstract void gohome();	

}

class Myhome extends Home{


	//继承了抽象函数和成员变量

	/*继承以后不写抽象类的实现则不能编译通过
	原则之一:有抽象类必须声明为抽象类
	*/
	
	void gohome(){
		System.out.println("我回家了");
	}
}
public class Test{

	public static void main(String[] args){		

		//子类对象
		Myhome yang=new Myhome();
		yang.gohome();
		
		//用对象转型输出
		Home wang=new Myhome();
		wang.gohome();

		 	
		
		
	}
}

3.抽象类可以有构造函数吗?

//2.尝试用抽象类生成对象
abstract class Home{


	String address;
	abstract void gohome();	
	//构造函数
	Home(){
		System.out.println("Home类 无参构造函数");
	}
	Home(String address){
		System.out.println("Home类 有参构造函数 我家住"+address);
	}
	

}

class Myhome extends Home{


	//继承了抽象函数和成员变量
	String city;
	Myhome(){
		super();
		System.out.println("Myhome类 无参构造函数");
	}
	Myhome(String city,String address){
		super(address);
		this.city=city;
		System.out.println("Myhome 有参构造函数 我家在"+city);	
	}
	void gohome(){
		System.out.println("我回家了");
	}
}
public class Test{

	public static void main(String[] args){		

		// 创建对象
		Myhome one=new Myhome();
		
		System.out.println();
		Myhome sec=new Myhome("Guangxi","Baise");
	
	}
}
























作者:YangGan
出处:http://blog.csdn.net/incyanggan
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics