java抽象类为什么可以有构造方法(java抽象类中的构造方法作用如何理解)
大家好,今天来为大家分享java抽象类为什么可以有构造方法的一些知识点,和java抽象类中的构造方法作用如何理解的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
java中,抽象类可以有构造方法吗
子类在调用父类时无论自己有没有构造方法都会先去执行父类无参的函数。也就是说class Figure中有一句隐含构造方法 Figure(){}
Rectangle r= new Rectangle(9,5);会去先执行Figure中不带参的构造函数,再执行自己的构造函数Rectangle(double a,double b)因为他调用了super(a,b);再执行
Figure(double a,double b)
Triangle t= new Triangle(10,8);它与上面类似
Figure figref;它只是创建了一个对象
figref=r;对对象的赋值就如同学生A研究生B
研究生肯定是学生学生不一定是研究生
只是小弟的愚见有错误之处请指出小弟也只是初学
参考 http://zhidao.baidu.com/question/41148169.html?si=10
构造方法十分重要,他的名称必须和类名相同,并且没有返回值,在对象创建时被调用。在类中主要扮演着初始化全局变量的角色,作为方法的一员它同样拥有参数,运用参数使对象在建立的时候与外界交互,获得需要的参数来完善对象的初始化过程。
这样说可能你觉得比较抽象,我举个例子给你看:
ex1:
public class Example1{
private int i;
private String s;//在这里我们声明了一个int和一个String,但是他们没有被初始化!
//下面开始运用构造方法来初始化
public Example1(String s1;int i1){
i=i1;
s=s1;
}
//通过构造方法完成了初始化
public static void main(String[] args){
Example1 ex1=new Example1("I am example1",10);
System.out.println("i="+ex1.i);
System.out.println("s="+ex1.s);
}
如上所示,在main方法里我们创建了一个example1的对象ex1,并运用构造方法为变量i和String s赋值。
希望对你理解构造方法有所帮助,谢谢!
参考 http://zhidao.baidu.com/question/46180637.html?si=9
1.
接口完整定义
public interface itest
{
public void itest1();
public void itest2();
}
接口不可以定义成STATIC和FINAL的
类实现接口
public class test implements itest
{
public void itest1()
{
}
public void itest2()
{
}
}
如果要实现多个接口
public class test implements itest1,itest2,……
2.
public Son(){......}是构造器,只跟当前类有关系,构造器不可以被继承,所以不可以重写。
3.
抽象类
public abstract class atest
{
abstract public void test();
}
子类中初始化,只要把抽象的具体化就好,比如方法加上方法体
public class aatest extends atest
{
public void test()
{
}
}
因为构造器里的变量与类的变量重名,this.year代表类的变量,year代表构造器里的变量。
参考 http://zhidao.baidu.com/question/38000016.html?si=8
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static fin
java抽象类中的构造方法作用如何理解
/*学好java基础,学深java基础,才能走的更远(为什么呢?百度有更好的解释),愿我们共同探讨学习,用通俗易懂的话语来了解java
1.抽象类也是类,只不过本身不能实例化,要通过子类实例化。
2.是类就有构造方法,如果我们没有给出构造方法,系统将自动提供一个无参构造方法,如果我们给出了构造方法,系统将不会提供。
那么问题来了,为什么非得有构造方法呢?
构造方法(函数)的作用:(1)用于创建对象,初始化参数;(2)接受子类传来的参数,初始化参数,子类堆内存的某块位置存放父类的初始化参数
那么问题又来了,问题1:抽象类有构造方法怎么不能创建对象?问题2:它与接口又有什么关系呢?
问题1:请看构造函数的作用,还要补充下,用抽象类就要写个继承它的子类,然后通过父类引用指向子类这也是多态的表现,Father f= new Son();引用地址f就可以调用抽象类中的一般方法;
那么问题又来了抽象类怎么访问子类的方法呢?好了,自己考虑去
对于抽象类和一般类,接口来个例子
话说我去兰州拉面馆吃面,拿着菜单
抽象类的说法:
我:老板来碗面
老板:你需要什么面?
我:就是面啊?---------->描述抽象,既然抽象类都这么抽象了,那它有什么作用呢?简单来说,就是抽取某个类的共性功能,方便分类调用(编程就需要逻辑思维清晰,可读性强,就像书为什么要目录);举个例子,假如有哥们想吃面,想吃辣点的(面的共性辣),就快速选个方向去四川面馆,到了面馆就有查渣面,鸡丝凉面(具体类)选择...
老板:...
类的说法:
我:老板来碗面
老板:你需要什么面?
我:油泼面------------>描述具体
接口:从广义的角度讲对外提供规则的都是接口,来个例子
话说你家大门锁,你可以用匹配的钥匙打开锁,可我不一定非得要用你那型号的钥匙去开你家大门,我可以用铁丝就可以了,想想,实际生活中当真可以么,去问盗贼,他们"接口"倒是学的不赖
为什么用铁丝也可以开门呢?因为实现了锁孔内几个顶针同时顶上然后什么什么的方法,现在我们来看,我们可以用钥匙这个对象可以开锁,用铁丝这个对象开锁,他们共同的特点就是实现了
开锁的一些规则要求,也就是实现了开锁的要求的方法
需要说明的是:接口是没有构造方法的,它只是用来对外提供规则,其他类都可以实现这个接口,重写里面的方法
问题2:抽象类和接口的关系?
一般类继承抽象类,extends
一般类也可继承一般类----->类与类可以继承,单继承,儿子和父亲的关系(一个儿子不能来自两个父亲的基因,能吗?)
一般类和抽象类可以实现一个或多个接口,implements--->....干儿子和干爹的关系
那么问题来了:有没有人有个奇葩的问题,接口可不可以有父亲?干爹呢?
......收住,回到正题
3.子类中所有的构造方法默认都会访问父类中空参构造方法-->为什么呢?
因为子类会继承父类中的数据,可能还会使用父类的数据,
所以,子类初始化之前,一定要先完成父类数据的初始化。
4.那么问题来了,要是父类没有无参构造呢?
不会有人认为父类没构有造方法吧?。。。
系统会默认加的(前面有提到),这里是指父类手动写了有参构造,子类继承也要手动写出构造方法(请看下面例子)
5.继承的注意事项
(1):子类只能继承父类所有非私有的成员(成员方法和成员变量)--->皇帝老儿的妃子,你太子能继承享用,恩...只代表大众的想法,特殊的除外,不钻牛角尖
(2):子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
*/
/* 1.父类没有无参构造方法,子类怎么办?
super解决
this解决
2.注意事项
super(…)或者this(….)必须出现在构造方法的第一条语句上
*/
class test{
public static void main(String[] args){
Son son= new Son("张三",23);
System.out.print(son.name+":"+son.age);
}
}
class Father{
String name="李四";//姓名
int age=24;//年龄
/*public Father(){//空参构造
System.out.println("Father空参构造");
}*/
public Father(String name,int age){//有参构造
//super();系统默认的,你知道是继承谁的吗?最高父类Object
this.name= name;
this.age= age;
}
public void setName(String name){//设置姓名
//super();系统默认的,你知道是继承谁的吗?最高父类Object
this.name= name;
}
public String getName(){//获取姓名
return name;
}
public void setAge(int age){//设置年龄
this.age= age;
}
public int getAge(){//获取年龄
return age;
}
}
class Son extends Father{
//String name="张三";
//int age=23;
/*public Son(){//由于父类没有无参构造(子类不继承父类构造放法),但是可以通过加this(值)或super(值)去访问父类构造方法
//super();系统默认的,你知道是继承谁的吗?可惜上面 Father类没有无参构造
//this(name,age);//注意,这种写法错误,虽然name,和age为成员变量,但是,无参构造方法没有参数传进来,(说到底无参构造方法终究还是个方法而已)
this("张三",23);//这种方法可以,为什么?因为它会在本类中寻找有参构造,通过 super(name,age)将值传入父类(因为父类只有有参构造)
//留下个疑问?要是下面有参构造,形参少了参数,即public Son(String name){ super(name,age);}还起作用吗?试试
//super(name,age);//同上
super("李四",24);//同上,注意this(值)和super(值)不能同时在构造方法的第一条语句上,但系统默认super()除外
}
public Son(String name,int age){
//super(name);
//super();系统默认的,你知道是继承谁的吗?可惜上面 Father类没有无参构造
super(name,age);
System.out.print(name+":"+age);
}
}
//子类构造方法另外种写法对吗?
class test{
public static void main(String[] args){
Son son= new Son("王五");
System.out.print(son.name+":"+son.age);
}
}
class Father{
String name;//姓名
int age;//年龄
/* public Father(){//空参构造
System.out.println("Father空参构造");
}
*/
public Father(String name,int age){//有参构造
//super();系统默认的,你知道是继承谁的吗?最高父类Object
this.name= name;
this.age= age;
}
public void setName(String name){//设置姓名
//super();系统默认的,你知道是继承谁的吗?最高父类Object
this.name= name;
}
public String getName(){//获取姓名
return name;
}
public void setAge(int age){//设置年龄
this.age= age;
}
public int getAge(){//获取年龄
return age;
}
}
class Son extends Father{
//String name="张三";
//int age=23;
/* public Son(){//由于父类没有无参构造(子类不继承父类构造放法),但是可以通过加this(值)或super(值)去访问父类构造方法
//super();系统默认的,你知道是继承谁的吗?可惜上面 Father类没有无参构造
//this(name,age);//注意,这种写法错误,虽然name,和age为成员变量,但是,无参构造方法没有参数传进来,(说到底无参构造方法终究还是个方法而已)
this("张三",23);//这种方法可以,为什么?因为它会在本类中寻找有参构造将值传入父类(因为父类只有有参构造)
//留下个疑问?要是下面有参构造,形参少了参数,即public Son(String name){ super(name,age);}还起作用吗?试试
//super(name,age);//同上
super("李四",24);//同上,注意this(值)和super(值)不能同时在构造方法的第一条语句上,但系统默认super()除外
}*/
public Son(String name){//我们说子类不继承父类的构造方法,也可以这样写对吗?
//super(name);
//super();系统默认的,你知道是继承谁的吗?可惜上面 Father类没有无参构造
super(name,24);
System.out.print(name+":"+age);
}
}
//就写这么多吧,不断的为什么,我都要疯了,有错误的和遗漏的希望指正
抽象类有构造方法吗
问题一:java抽象类中的构造方法作用??如何理解? java抽象类的构造方法和普通类的构造方法一样
都是用来初始化类
只是抽象抚的构造方法不能直接调用因为抽象类不能实现实例
但是一旦一个普通类继承了抽象类便也可以在构造函数中调用其抽象类的构造函数
也可以使用其方法
可以这么理解吧抽象类就是一个不能实例化的不同类
不过如果方法加了abstract那么就必须在子类里面重写了
问题二:为什么抽象类有构造方法,接口却没有构造方法抽象类设计出来是用来实现多态(动态绑定),而且抽象类中可以有函数的具体实现。
而接口不提供任何具体实现,它被设计出来用来允许你通过创建一个能够被向上转型为不止一种基类型的类,来实现一种C++多重继承(multiple inheritance的变种。
问题三:java中,抽象类可以有构造方法吗抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。
问题四:新手~~java抽象类构造方法问题 Cat myCat= new Cat(myCat);你右边作为构造函数传入的myCat是个啥?你的程序里要求的是String类型,是不是考虑改成Cat myCat= new Cat(myCat);
问题五:java中,抽象类可以有构造方法吗可以有构造方法。构造方法的作用有两个,一个是初始化变量,另外一个是实例化对象,抽象类不能实例化,还可以做另外一个作用。
问题六:一个抽象类中有构造方法有什么用可以被子类的构造方法调用,否则子类为抽象父类加载私有属性会很麻烦
问题七:抽象类中有构造函数吗?抽象类中有构造函数吗?抽象类中有构造函数吗建议你看一下百度文库中的解密高考抽象函数文章
wenku.baidu/..._t1y4_
问题八:java的抽象类中父类一定要含无参构造函数吗不一定,但是一定要有一个构造函数,有参无参都可以
构造函数是对象的基本,没有构造函数就没有对象。
若果在父类中(这里就是你的抽象类)中显示的写了有参数的构造函数,在子类继承就必须写一个构造函数来调用父类的构造函数
例子: abstract class Person{定义一个抽象类,必须被继承
Person(int i){
}
}
public class Student extends Person{
Student(){
super(int i):必须显示的调用父类构造方法super代表父类对象
}
}
如果父类中有没有参数的构造函数,在子类中可以不显示的写父类的构造函数,Java会自动调用没有参数的构造函数
例子:
abstract class Person{定义一个抽象类,必须被继承
Person(){此构造函数也可以不写,Java会默认添加一个没有参数的构造函数
}
}
public class Student extends Person{
Student(){
super();可以不写,Java会自己调用这个super()方法
}
}
问题九:抽象类中定义构造方法后,继承它的子类中也必须要写出构造方法吗 1.抽象类也是类,只不过本身不能实例化,要通过子类实例化。
2.是类就有构造方法,如果我们没有给出构造方法,系统将自动提供一个无参构造方法,如果我们给出了构造方法,系统将不会提供。
3.子类中所有的构造方法默认都会访问父类中空参构造方法--->也就是说,子类new对象的时候,先去父类中逛了互圈,完成了父类的初始化(父类初始化值存在子类new对象开辟堆内存的某块地方)(再说白点,每一个构造方法的第一条语句默认是super(),有参也是)
4.那么问题来了,要是父类没有无参构造呢?
不会有人认为父类没有构造方法啦?。。。
系统会默认加的(前面有提到),这里是指父类手动写了有参构造,子类继承要加super(值)或是this(值),从而子类继承的时候就要写出构造方法,再加上this(值)或是super(值)
5.继承注意:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类
懵逼了吧,话说从学习java到放弃java
关于java抽象类为什么可以有构造方法,java抽象类中的构造方法作用如何理解的介绍到此结束,希望对大家有所帮助。