什么是类的继承性Java中子类和父类有什么关系

什么是类的继承性Java中子类和父类有什么关系,第1张

1

继承,是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于可以抽取多类事物的共性。子类中有和父类中可访问(可继承到子类)的同名同返回类型同参数表的方法,就会覆盖从父类继承来的方法。

2(1)standalone

applications,或称为applications:可独立执行的程序

针对用户接口的不同,可分为:

a)

console

application

b)

windows

application

(2)embedded

applications:嵌入式应用程序,必须依附在其它程序里执

a)applets:内嵌于网页并通过因特网传递,在用户端使用支持Java的浏

览器内动态地由服务器端下载并执行的小程序

b)JSP、Java

Servelet:以网页的形式存在于服务器端并且通过网络下载

至支持Java的浏览器内执行

c)MIDlet:利用J2ME

MIDP所开发而成,执行环境为移动电话及PDA等

d)Spotlet:利用J2ME

CLDC所开发而成,执行环境为PDA等。

3FlowLayout,流式布局管。尝试在一行中按增加顺序摆放组件,窗体大小改变时,组件位置会相应发生改变

BorderLayout,按方位进行布局管理,(North,South,East,West,Middle)不明确指定,就会默认加载在中间(Middle),每个部分只能放一个组件

GridLayout,网格布局,通过行列,间距,来用网格分割,把组件放入如网格中,先行后列摆放组件。可以保证每个组件的大小都是一样的

CardLayout,卡片布局,组件重叠放置。

GridBagLayout,组件可以跨行跨列的网格布局。

Frame的默认布局管理器borderlayout

Panel的默认布局管理就是FlowLayout。

知道类、继承,写属性,很容易的事情了。

class Father{

//自有属性

}

class Son extends Father{

///扩展属性

}

类是具有相同属性和方法的集合。

继承是父类和子类之间的一种类的复用方式

包是组织一系列相关类和接口的一个命名空间

接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

前半句是对的,后半句(“期间。。。”)理解上有些偏差。

理解方式有很多种,但我更倾向于这样的:

假设有这样的定义

class A

{

void foo(int i);

void bar(int i) const;

};

则可以理解 foo、bar 分别为一个普通函数,声明是这样的:

void foo(int i, A const this); // this 不能被改变, this 可以被改变

void bar(int i, const A const this); // this 和 this 都不可以被改变

调用时的 afoo(5); 和 abar(5) 可以看作是 foo(5, &a); 和 bar(5, &a); 。

如果 class B : public class A{}; ,则 B 可以隐式转化为 A, bfoo(5) 的调用可以看作是 foo(5, &b); 。

以上的 foo 函数、bar 函数本身只有一个实体。如果不是 virtual 的函数,是不会由 this 指针来协调的。(如果是 virtual 函数,则调用过程是通过 this 指向的对象中的虚表指针找到虚表,然后在虚表中对应位置找到函数指针,再调用。这样也不能说是由 this 指针协调的。)

对于楼上讨论到的函数可见性问题,完全是在调用的地方对函数的可见性决定的。如果是 protected 的函数,则在 class A 和 class B 外也无法直接调用;即使是 private 的函数,在 A 的 friend 中,bfoo(5); 也是可以被调用的。所以可见性与该问题无关。

对于楼上的楼上所说的,我觉得会造成误导。this 指针不同完全是因为 &a 和 &b 的不同。&a 所取到的是 a 对象的地址;而 &b 所取到的是 b 对象的地址,调用的时候也会转化成 b 对象中基类对象的地址。所以两者不可能相同,但这并不能作为解释 this 指针有所不同的依据。

对于 C++ 里类似的问题还有任何疑问,可以直接问我。楼上几位如果对于我说的有不同见解,也欢迎讨论。

java中子类继承父类程序执行顺序问题

Java中,new一个类的对象,类里面的静态代码块、非静态代码、无参构造方法、有参构造方法、类的一般方法等部分,它们的执行顺序相对来说比较简单,用程序也很容易验证。比如新建一个测试父类。

public class FatherTest {

private String name;

FatherTest(){

Systemoutprintln("--父类的无参构造函数--");

}

FatherTest(String name){

thisname=name;

Systemoutprintln("--父类的有参构造函数--"+thisname);

}

static{

Systemoutprintln("--父类的静态代码块--");

}

{

Systemoutprintln("--父类的非静态代码块--");

}

public void speak(){

Systemoutprintln("--父类的方法--");

}

}

加入一个main程序后

public static void main(String[] args) {

Systemoutprintln("--父类主程序--");

FatherTest father=new FatherTest("父亲的名字");

fatherspeak();

}

执行结果为:

--父类的静态代码块--

--父类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法—

可以很明显的看出来执行顺序:静态代码块—主程序—非静态代码块—构造函数—一般方法。

如果加入子类的继承以后,情况就会变得复杂些。比如我们再新建一个测试子类。

public class SonTest extends FatherTest {

private String name;

static{

Systemoutprintln("--子类的静态代码块--");

}

{

Systemoutprintln("--子类的非静态代码块--");

}

SonTest(){

Systemoutprintln("--子类的无参构造函数--");

}

SonTest(String name){

thisname=name;

Systemoutprintln("--子类的有参构造函数--"+thisname);

}

@Override

public void speak(){

Systemoutprintln("--子类Override了父类的方法--");

}

}

然后再加入一个main函数

public static void main(String[] args) {

Systemoutprintln("--子类主程序--");

FatherTest father=new FatherTest("父亲的名字");

fatherspeak();

SonTest son=new SonTest("儿子的名字");

sonspeak();

}

执行结果为:

--父类的静态代码块--

--子类的静态代码块--

--子类主程序--

--父类的非静态代码块--

--父类的有参构造函数--父亲的名字

--父类的方法--

--父类的非静态代码块--

--父类的无参构造函数--

--子类的非静态代码块--

--子类的有参构造函数--儿子的名字

--子类Override了父类的方法--

加入了子类以后,执行顺序有了新的变化,我们可以总结一下。首先第一部分执行的是父类的静态代码块—子类的静态代码块—主程序。这一部分都是执行一次,与建立多少对象没有关系。第二部分new了一个父类对象,并调用了方法。执行了它的非静态代码块—构造函数—一般方法。第三部分new了一个子类的对象,并调用了方法。执行顺序为父类的非静态代码块—父类的无参构造函数,然后是子类的非静态代码块—子类构造函数—子类的方法。

以上就是关于什么是类的继承性Java中子类和父类有什么关系全部的内容,包括:什么是类的继承性Java中子类和父类有什么关系、用java程序编写一个子类继承父类、java中类、继承、包、接口的区等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9671687.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存