
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中类、继承、包、接口的区等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)