导航:首页 > 编程语言 > java的组合与继承

java的组合与继承

发布时间:2023-05-29 23:02:54

A. java 为什么说多用组合,少用继承

java组合我没听收过,但是继承通常都会和实现放在一起说:
在java中,通常一个类只能继承一个类,但一个类却可以实现多个接口,所以采用实现的方式写代码会更加灵活

B. Java里如何实现多继承

接口(interface) 接口被用来建立类与类之间关联的标准 Java code public interface ITest{ public void test(); } public class TestImpl implements ITest{ public void test(){ System out println( test ); } }

抽象类(abstract class) 只要类中有一个抽象方法 此类就被标记为抽象类 实际上抽象类除了被继承之外没有任何意义

区别 接口是公开(public)的 里面不能有私有的方法或变量 是用于让别人使用的 实现接口的一定要实现接口里定义的所有方法 而抽象类是可以有私有方法或私有变量的 实现抽象类可以有选择地重写需要用到的方法 但是必须实现里面所有的抽象方法 抽象类在 Java 语言中表示的是一种继承关系 一个类只能使用一次继承关系 但是 一个类却可以实现多个interface(java中实现多重继承的方法之一) 抽象类中可以有自己的数据成员 也可以有非abstarct的成员方法 而在接口中 只能够有静态的不能被修改的数据成员(也就是必须是 static final的 不过在 interface中一般不定义数据成员) 而且所有的成员方法都是抽象的 抽象类和接口所反映出的设计理念不同 其实abstract class表示的是 is a 关系 interface表示的是 like a 关系 (组合是 has a 关系) 接口中定义的变量默认是public static final 型 且必须给其初值 所以实现类中不能重新定义 也不能改变其值 抽象类尘辩中的变量默认是 friendly 型 其值可以在子类中重新定义 也可以重新赋值

一般的应用里 最顶级的是接口 然后是抽象类实现接口 最后才到具体类实现 不是很建议具体类直接实现接口的 还有一种设计模式是面向接口编程 而非面向实现编程

其实接口是抽象类的延伸 可以将它看做是纯粹的抽象类 就是说接口比抽象类还抽象 还有设计接口的目的就是为了实现C++中的多重继承 不过java团队设计的一样更有趣的东西来实现这个功能 那就是内部类(inner class)

内部类(inner class) Java code public class OuterClass{//外部类 private class InnerClass{}//内部类 }

一 定义 放在一个类的内部的类我们就叫内部类 二 作用 内部类可以很好的实现隐藏 也就是封装性 一般的非内部类 是不允许有 private 与protected权限的 但内部类亏散可以 内部类拥有外围类的所有元素的访问权限 可是实现多重继承(这个特点非常重要 个人认为它是内部类存在的最大理由之一) 可以避免修改接口而实现同一个类中两种同名方法的调用 三 多重继承的实现

类一 Java code public class Example {

public String getName() { return luffyke ; } }

类二 Java code public class Example {

public int getAge() { return ; } }

类三

Java code public class MainExample {

public class Test extends Example { public String getName() { return super getName(); } }

public class Test extends Example { public int getAge() { return super getAge(); } }

public String showName() {销兄氏 return new Test () getName(); }

public int showAge() { return new Test () getAge(); }

public static void main(String args[]) { MainExample example = new MainExample(); System out println( 姓名: + example showName()); System out println( 年龄: + example showAge()); } }

lishixin/Article/program/Java/hx/201311/26594

C. java中继承的好处是什么,在组合和继承中该如何取舍

1,继承提高了代码的重复利用性;

2,继承是面向对象的,一类事物可以独立存在,解藕了类与类之间的斗联系。
3,继承更利于程序的设计。
5,在组合中,一定要把同一类事物放在一起,和现实生活中一样,每一类事物都是有自己的共性和自己的特性,按毛主席的矛盾论说是:矛盾的普遍性与特殊性,普遍性就是继承来的。
6,在写代码之前,分析和设计是关键的一步,这一步解决的就是哪些类是同类的,哪些东西是公共的。

D. java通过“组合和 继承”关系表现出汽车跑车以及和卡车的类的关系

汽车类有轮胎,方向盘,引擎等组合而成,所以,轮胎一个类,方向盘一个类,引擎一个类,等。。。在写个汽车搜中类里用组合。

卡车继承汽车,在码漏侍比汽车多点东西,比如 载重?跑车继承汽车,多个属性 比如 速度 这就你你自己去想了,遇到问题 自己先思考,不会了翻翻书,最后才去问迟吵别人,但是别人只会告诉你思路。。

E. 谈谈Java中的继承与组合

继承和组合的概念

在新类里简单地创建原有类的对象 我们把这种方法叫作 组合 因为新类由现有类的对象合并而成 我们只是简单地重复利用代码的功能 而不是采用它的形式

第二种方法是创建一个新类 将其作为现有类的一个 类型 我们可以原样采取现有类的形式 并在其中加入新代码 同时不会对现有的类产生影响 这种魔术般的行为叫作 继承 (Inheritance) 涉及的大多数工作都是由编译器完成的 对于面向对象的程序设计 继承 是最重要的基础概念之一 对于组合和继承这两种方法 大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)

组合也就是一个类的对象是另外一个类的成员 一般的程序都有组合的意味 只不过是基本数据类型是成员变量 下面请看具体的例子

class Head

{

Head(){

System out println( head );

}

}

class Body

{

Body(){

System out println( body );

}

}

class Person()

{

Head h=null;

Body b=null;

Person() //人是由头和身体组成的 Head和Body的对象是Person的一部分

{

h=new Head();

b =new Body();

}

}

继承作为面向对象的三个重要特性的一个方面 在面向对象的领域有着及其重要的作用 好像没听说哪个面向对象的语言不支持继承

class Person

核扮桐{

private String name=null;

private int age= ;

public Person(String n int a)

{

name=n;

age=a;

}

int getAge()

{

return age;

}

String getName()

{

return name;

}

void getDescription()

{

System out println( name: +name+ + age: +age);

}

}

class Student extends Person

{

private String studno=null;

public Student(String n String no int a)

{

super(n a);

studno=no;

}

}

说明:Student类中有三个成员变量name age studno和一个方法getDescription();

注意:子类继承了父类的所有变量和函数 只是缺孙子类不能访问父类的private类型的变量和函数 其实privae类型的变量还是继承到子类中的

无论还是继承 都允许我们将子对象置于自己的新类中 大家或许会奇怪两者间的差异 以及到底该如何选择

如果想利用新类内部一个现有类的特性 而不想使用它的接口 通常应选择组合 也就是说 我们可嵌入一个对象 使自己能用它实现新类的特性 但新类的用户会看到我们已定义的接口 而不是来自嵌入对象的接口 考虑到这种效果 我们改坦需在新类里嵌入现有类的private对象

有些时候 我们想让类用户直接访问新类的组合 也就是说 需要将成员对象的属性变为public 成员对象会将自身隐藏起来 所以这是一种安全的做法 而且在用户知道我们准备合成一系列组件时 接口就更容易理解 car(汽车)对象便是一个很好的例子

class Engine {

public void start() {}

public void rev() {}

public void stop() {}

}

class Wheel {

public void inflate(int psi) {}

}

class Window {

public void rollup() {}

public void rolldown() {}

}

class Door {

public Window window = new Window();

public void open() {}

public void close() {}

}

public class Car {

public Engine engine = new Engine();

public Wheel[] wheel = new Wheel[ ];

public Door left = new Door()

right = new Door(); // door

Car() {

for(int i = ; i < ; i++)

wheel[i] = new Wheel();

}

public static void main(String[] args) {

Car car = new Car();

car left window rollup();

car wheel[ ] inflate( );

}

} ///:~

由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分) 所以有助于客户程序员理解如何使用类 而且类创建者的编程复杂程度也会大幅度降低

如选择继承 就需要取得一个现成的类 并制作它的一个特殊版本 通常 这意味着我们准备使用一个常规用途的类 并根据特定的需求对其进行定制 只需稍加想象 就知道自己不能用一个车辆对象来组合一辆汽车——汽车并不 包含 车辆 相反 它 属于 车辆的一种类别 属于 关系是用继承来表达的 而 包含 关系是用组合来表达的

protected

现在我们已理解了继承的概念 protected这个关键字最后终于有了意义 在理想情况下 private成员随时都是 私有 的 任何人不得访问 但在实际应用中 经常想把某些东西深深地藏起来 但同时允许访问衍生类的成员 protected关键字可帮助我们做到这一点 它的意思是 它本身是私有的 但可由从这个类继承的任何东西或者同一个包内的其他任何东西访问 也就是说 Java中的protected会成为进入 友好 状态

我们采取的最好的做法是保持成员的private状态——无论如何都应保留对基 础的实施细节进行修改的权利 在这一前提下 可通过protected方法允许类的继承者进行受到控制的访问

import java util *;

class Villain {

private int i;

protected int read() { return i; }

protected void set(int ii) { i = ii; }

public Villain(int ii) { i = ii; }

public int value(int m) { return m*i; }

}

public class Orc extends Villain {

private int j;

public Orc(int jj) { super(jj); j = jj; }

public void change(int x) { set(x); }

} ///:~

可以看到 change()拥有对set()的访问权限 因为它的属性是protected(受到保护的)

再论合成与继承

lishixin/Article/program/Java/hx/201311/26635

F. Java编程:组合,继承和代理的区别

组合的话,是在类中new一个对象,然后就只能调用这个对象的方法了,是死的

而你用代理的话,代理不仅要new那个对象,还要把你想调用这个对象的方法也写出来,方法实现是通过这个new的对象来实现的,当然你也可以在方法中添加你自己想实现的功能,这样做又有了继承中重写的感觉,所以说代理是继承和组合的中庸之道,lz可以看看thinking in java7.3章 7.4章 还有网页链接这篇博客,写的很详细

G. JAVA中什么是继承

继承在本职上是特殊一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的 一些属性或方法。

1.Java继承的语法格式:

Java继承的关键字是:extends

public class 子类名 extends 父类名{...}

如: public class UNStudent extends Student {...} 注:1.子类又称超类,拓展类 ;父类又称基类。

2.Java中类的继承只能是单继承(单根继承),即一个类只能继承一个父类,但是一个类可以由多个类来继承它。

3.Java会给每一个没有设置父类的类,自动添加一个父类就是Object 。

(7)java的组合与继承扩展阅读:

一、子类继承父类的结果

1.子类继承父类后,继承到了父类所有的属性和方法。注:是所有。

2.子类可调用的方法也要看情况而定:

子类和父类在同一个包下时 “子类和子类的对象”可以调用父类的默认的,受保护的,公有的属性以及方法。

子类和父类在不同的包下时,在子类中可以调用受保护的,公有的属性以及方法,而子类的对象可以调用受保护的,公有的属性以及方法。

二、方法的重写

1.当子类和父类都有某种方法,而子类的方法更加要求细致,或者实现功能不同,就需要方法的重写。

2.重写条件

①必须要存在继承关系;只有继承之间的关系才能有方法的重写

②方法的返回值类型,方法名,参数个数,参数类型,参数顺序,必须要完全一致;

如:父类中方法 public void play (int n ; String s){方法体1...}

重写后的子类方法public void play(int n ; String s){方法体2...}

3.子类重写方法时的访问修饰符可以大于或者等于父类方法的访问修饰符。

4.重写后的方法会被优先调用。

三、自动转型

自动转型的实现要求有继承关系

格式如下:父类名 对象名 = new 子类构造方法;

如:Student stu = new UNStudent;

而强制转型格式如下:子类名 对象名 = (子类名)父类对象名

如:UNStudent un = (Student)stu;

自动转型可以拓宽方法的作用访问域

在使用自动转型后,子类自己定义的方法是不能在自动转型后执行;

原因是因为Java的编译机制,它会优先判断父类中是否存在该方法,如果存在则通过编译,如果不存在则报错。

第二种自动转型:转型后只需要不同类的不同对象调用想吐的方法,很方便!

/**访问修饰符 返回值数据类型 方法名(父类类型 参数名,...){

调用方法。

}

父类名 对象名 = new 子类名;

子类名 对象名 = new 子类名;

方法名(对象名);

*/

比如拿到驾驶证为A2的人,可以驾驶重型货车,当然也可以驾驶大型货车,中型货车,小型货车,小客车,小轿车,摩托车... 可以选择第二种自动转型的方法,便于调用同一个方法。

自动转型好处:1.减少冗余代码;2.在方法设置参数时,扩大访问范围。

四、多态

多态是由方法重载,继承,方法重写,自动转型等技术的组合。

五、为什么需要继承?

1.提高代码的重用性。

2.提高程序的扩展性。

JAVA继承总结

H. Java中合成和继承的区别

java中的继承用的关键字是extends,而实裤陆现用的关键字是implements;java中类的继承只能是单继承,而实现胡毕顷可以是多实现。java中的继承可以继承数做父类的所有方法。

I. java中的组合与继承!

继承:春颤
class A{
//.....
}
class B extends A{
//.....
}
组合:(组扒察败合不是没晌重写)
class A{
//.....
}
class B{
A a;
}

J. java重用和继承的区别

继承是重用的一种方式。重用最常见的两种方式是组合和继承。
组合通常使用在需要既有类的特性,而不是它的接口的时候。这个时候在新类中使用既有类来帮助你实现新的功能,新类的使用者看到的是新类的接口而不是既有类的接口,而且你还可以使用private来对重用的类进行隐藏。如在新类中定义List<String> list =new ArrayList<>();
继承则通常是在你需要既有类的接口,但是需要对这些进口的实现定义特殊的版本(即重写父类方法)。

阅读全文

与java的组合与继承相关的资料

热点内容
算法可以用图表表示 浏览:946
山西太原php 浏览:271
常用cmd网络命令 浏览:676
hashmap7源码分析 浏览:896
搜索引擎原理技术与系统pdf 浏览:359
运动估计算法python 浏览:858
java正则1 浏览:536
redhatlinux最新 浏览:178
python字典编程词汇 浏览:144
微信和服务器如何通讯 浏览:10
百家号服务器配置有什么用 浏览:598
怎么为电脑加密 浏览:59
服务器出现差错是什么意思 浏览:617
苹果app移到商店里怎么删掉 浏览:254
phpjsphtml 浏览:63
吃鸡手机国际服服务器超时怎么办 浏览:69
努比亚Z5无命令 浏览:642
展示网站云服务器 浏览:872
代码混淆器php 浏览:367
贝恩pdf 浏览:209