java抽象类this(java抽象类和接口)

本篇文章给大家谈谈java抽象类this,以及java抽象类和接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、JAVA抽象类的this一个问题2、java抽象类中的构造方法作用??如何理解?3、关于java中的抽象类的this问题,相当复杂4、java中super和this的使用,静态变量和静态方法,继承怎么实现,接口与抽象类的区别!

JAVA抽象类的this一个问题

抽象类中照样可以用this。this就是当前对象,当前对象既然已经实例化了,它当然不会直接是此抽象类(类A)的实例,而是一个继承这个抽象类的类(类B)的实例。这个实例里有一部分是由类A刻画的,有一部分是由类B刻画的,无论类B是什么,这个实例由类A刻画的那部分里总是有age这个属性的,this.age就是指这个实例里的age属性。

“抽象类就不可以获取该类的实例对象”这话其实是错的,抽象类固然不能有直接的实例,但是完全可能有实例就是这个抽象类型的。

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中的抽象类的this问题,相当复杂

你应该找本书仔细研究一下类的多态性.

看你提出的问题你说多态你学的差不多,我看差远了….

上面的例子我不给你讲了,我按我自己理解多态的方式按你的例子给你说一下…

一个程序在内存中有四个区..栈…堆…全局数据区…全局代码区….

在这里全局代码区里放着方法名….

因为C继承B,B继承A.所以

new C()的时候要先new B(),还要先new A()

new A()后,全局代码区先划出一块,,这里有:printMe()

new B()后,有getA()和printMe(),但后一个方法把构造A时方法覆盖了.举例子:父类A的printMe()是内衣,子类B的printMe()是外衣..正常情况下你只能看到外衣,看不到内衣的…但是super可以看到,你先别管,要不你好乱了,你只要记住.不用super的时候..你永远是只能看到外衣,看不到内衣的.

同理.

new C()后,里面还是有getA()和printMe(),但这里,getA()是父类,属于内衣,因为它没有外衣进行覆盖,所以还能看到..printMe()就是C的方法了.因为C时就给它加上外衣了..

所以你明白了.无论你声明哪一级的变量(A,B,C),只要是new C()的话..就只能输出”this is C “(先别想super)

this呢?它就指向new C()的这一块全局代码区…..

b=this.在这个问题上..你说B的构造方法不应该属于类C ……对吧…

this就是new C()时生成的全局代码区…这里会没有B的构造吗?构造方法不是方法吗?我在上面没写而已.其实它也在那里面.

this就是指向了使用本this的方法的对象所在的全局代码区…

多读几遍….这句话.

java中super和this的使用,静态变量和静态方法,继承怎么实现,接口与抽象类的区别!

super你就当作是是父类的名字。this就是当前东西。静态变量和静态方法是属于类的,当然也属于对象,只是说,加了静态这个关键词,它的应用范围更广一些。继承用extends关键字就可以实现。接口就是 里面的所有方法都是抽象的,抽象类就是有方法是具体的,有方法是抽象的。

java抽象类this(java抽象类和接口)

关于java抽象类this和java抽象类和接口的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月1日 13:02:21
下一篇 2024年4月1日 13:06:28

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4300
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4100
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4200
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4100
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    3900
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4500
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4700
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信