黑马程序员——————java中的继承和多态
来源:互联网 发布:知豆电动汽车价格表 编辑:程序博客网 时间:2024/06/18 14:18
------- android培训、java培训、期待与您交流! ----------
继承:
基本概念:
1.在java中用extends关键字标示继承关系。
2.在java中只支持单继承,不支持多继承,不支持多继承的原因是多继承会存在安全隐患 如:
class A
{
public void show()
{
System.out.println("A");
}
}
class B
{
public void show()
{
System.out.println("B");
}
}
当一个类C同时继承A、B的话若调用show()方法就会产生安全隐患
3.java中是支持多层继承的,也就是一个继承体系。所以当我们在学习java的api时应该先查看父类的描述,
了解共性 的基本功能,儿具体调用时,要创建子类的对象,因为子类中有更多的方法可供使用,或者父类
不能创建对象比如说抽象类。
继承的好处:
1.提高了代码的复用性
2.让类与类之间产生了关系,有了这个关系才有了多态的特性。
继承中需要注意的是:
1.不要单纯为了获取其他类的功能简化代码而继承,必须是类与类之间有属性间的关系才能继承。
继承中子父类中成员的特点:
1.成员变量的特点:
class Fu
{
int num1=2;
}
class Zi extends Fu
{
int num2=5;
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z=new Zi();
System.out.println(z.num1+"......"+z.num2);
//打印结果是 2......5
}
}
{
int num1=2;
}
class Zi extends Fu
{
int num2=5;
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z=new Zi();
System.out.println(z.num1+"......"+z.num2);
//打印结果是 2......5
}
}
class Fu
{
int num=2;
}
class Zi extends Fu
{
int num=5;
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z=new Zi();
System.out.println(z.num);
//打印结果是 5
}
}
{
int num=2;
}
class Zi extends Fu
{
int num=5;
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z=new Zi();
System.out.println(z.num);
//打印结果是 5
}
}
class Fu
{
private int num=34;
}
class Zi extends Fu
{
int num1=3;
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
System.out.println(z.num);
}\\编译失败
}
{
private int num=34;
}
class Zi extends Fu
{
int num1=3;
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
System.out.println(z.num);
}\\编译失败
}
通过上面的三个示例我们总结一下继承中成员的特点:
子类可以访问父类的非私有的成员变量,当子父类中有相同变量名的成员时,
默认的是访问子类中的,若想访问父类中的则用super关键字,子类是不能访问父类中的私有变量的
2继承中成员函数的特点:
class Fu
{
public void show1()
{
System.out.println("父类中的show1()方法");
}
public void show()
{
System.out.println("父类中的show()方法");
}
}
class Zi extends Fu
{
public void show()
{
System.out.println("子类中的show()方法");
}
public void show2()
{
System.out.println("子类中的show2()方法");
}
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
z.show();//打印的是:"子类中的show()方法";
z.show1();//打印的是:"父类中的show1()方法";
z.show2();//打印的是:"子类中的show2()方法";
}
}
{
public void show1()
{
System.out.println("父类中的show1()方法");
}
public void show()
{
System.out.println("父类中的show()方法");
}
}
class Zi extends Fu
{
public void show()
{
System.out.println("子类中的show()方法");
}
public void show2()
{
System.out.println("子类中的show2()方法");
}
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
z.show();//打印的是:"子类中的show()方法";
z.show1();//打印的是:"父类中的show1()方法";
z.show2();//打印的是:"子类中的show2()方法";
}
}
3.继承中构造函数的特点:
class Fu
{
FU()
{
System.out.println("父类的构造方法运行");
}
class Zi extends Fu
{
Zi()
{
System.out.println("子类的构造方法运行");
}
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
}
}
//执行结构是: 父类的构造方法运行
子类的构造方法运行
{
FU()
{
System.out.println("父类的构造方法运行");
}
class Zi extends Fu
{
Zi()
{
System.out.println("子类的构造方法运行");
}
}
class DD
{
public static void main(String []args)
{
Zi z=new Zi();
}
}
//执行结构是: 父类的构造方法运行
子类的构造方法运行
在对子类对象进行初始化的时候,父类的构造函数也会运行,那时因
为子类的构造函数默认的第一行有一条隐式语句super();
多态:
多态可以理解为:事物存在的多种体现形态
如:
猫 x=new 猫();
我们也可以说猫是动物
动物 x=new 猫();
abstract class Animal
{
abstract void eat();
}
class cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("捉老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
public void kanjia()
{
System.out.println("看家");
}
}
class DuoTai
{
public static void main(String[]args)
{
Ainmal a=new Cat();//这是向上转型
a.eat(); //调用的是父类中定义的方法
Cat c=(Cat)a; //多态后无法使用子类中的特有的方法,若想要 使用特有方法则向下转型
c.catchMouse();
}
}
{
abstract void eat();
}
class cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("捉老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
public void kanjia()
{
System.out.println("看家");
}
}
class DuoTai
{
public static void main(String[]args)
{
Ainmal a=new Cat();//这是向上转型
a.eat(); //调用的是父类中定义的方法
Cat c=(Cat)a; //多态后无法使用子类中的特有的方法,若想要 使用特有方法则向下转型
c.catchMouse();
}
}
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员——————java中的继承和多态
- 黑马程序员—Java继承
- 黑马程序员——JAVA继承中的构造方法
- 黑马程序员—继承
- 黑马程序员——OC中的封装、继承和多态
- 黑马程序员——Java基础---继承和抽象
- 黑马程序员—java基础复习—继承和接口
- 黑马程序员——Java基础---继承
- 黑马程序员——Java基础---继承
- 黑马程序员——Java基础--继承
- 黑马程序员——JAVA基础---继承
- 黑马程序员——Java继承
- 黑马程序员—Java基础—继承
- 黑马程序员——继承和多态
- 黑马程序员—JAVA类的继承
- 黑马程序员java学习—继承
- 黑马程序员—继承与多态
- 黑马程序员—继承与多态
- ListView通过CursorAdapter显示数据库内容
- jsp showModalDialog父子窗口传值
- C#跨线程修改控件——从MSIL和汇编看Invoke, 多线程, 事件与事件委托
- 更新sdk后,点击sdk管理器报出location of the android sdk has not setup in the prefrences
- fork()和vfork()函数
- 黑马程序员——————java中的继承和多态
- C#调用ATL COM
- CSharpThinking
- strcmp和memcpy比较
- C语言小机器人
- 有关DBN的一点小心得
- mini2440 DM9000 网卡驱动移植
- 使用COM简单操作IE
- 多线程实现大量数据加载时的等待画面