------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 面向对象的概念 :
面向对象是一种思想,相对于面向过程注重行为功能,面向对象把对象作为主体,通过调用对象的方法来完成相应的功能。在面向对象的世界里,万物皆对象,而对象就有相应的属性和功能,我们通过对这个世界事物的抽取,归纳,总结,能够更加高效的处理不同的事物。
2. 特点
是一种符合人们思考习惯的思想,可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。
完成需求时:
1. 先要去找具有所需功能的对象来用。
2. 如果该对象不存在,那么创建一个具有所需功能的对象。
这样可以简化开发并提高复用。
面向对象三个特征:封装、继承、多态。
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:
1. 将变化隔离。
2. 便于使用。
3. 提高重用性。
4. 提高安全性。
函数的封装:
就用private进行私有,私有是封装里面的一种表现形式。
封装是指隐藏对象的属性和实现细节,一旦私有了就在类外,你是不能访问,只能提供公共访问方式。
关于函数的继承;
继承的使用:1、是为了提高代码的复用性。2、让类与类之间产生关系,有了这个关系,才有了多态的特性。
在java语言中,java只支持单继承,不支持多继承,在C语言中就支持多继承。
java支持多层继承,也就是一个继承体系。
当你在用继承做题的时候,简单的一句话:先查阅父类的功能,在创建于子类对象的使用。
下面以继承为例子
需求1:老的手机显示的时候是名字,现在新手机显示是名字和音乐。
需求2:以前用名字显示出来,现在我想让它显示出family和音乐。
需求3:定义一个变量,把新的手机里面的变量引用到老的手机。
需求1
class Tel
{
void show()
{
System.out.println("name");
}
}
class NewTel
{
void show()
{
System.out.println("name");//也可以用另一种方式表示:super.show();
System.out.println("music");
}
}
class Shouji
{
public static void main(String[] args)
{
NewTel c=new NewTel();
c.show()
}
}
需求2
class Tel
{
void show()
{
System.out.println("name");
}
}
class NewTel
{
public void show()
{
System.out.println("family");
System.out.println("music");
}
}
class Shouji
{
public static void main(String[] args)
{
NewTel c=new NewTel();
c.show()
}
}
需求3
class Tel
{
int num=4;
void show()
{
System.out.println("name");
}
}
class NewTel extends Tel //extends 表示继承的意思
{
int num=8;
public void show() //public 属于权限最大的一个
{
System.out.println("family"); //把上面的“name” 改为 “family”
System.out.println(super.num); //super.num 代表的是父类的引用,this.num 代表的是本类对象的引用
System.out.println("music");
}
}
class Shouji
{
public static void main(String[] args)
{
NewTel c=new NewTel();
c.show();
}
}
1.多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
2.多态的前提
必须是类与类之间有关系,要么继承,要么实现
通常还有一个前提,存在覆盖
3.多态的好处
多态的先大大的提高了代码的扩展性
4.多态的弊端
提高了扩展性,但是只能使用父类的引用访问父类中的成员
通过继承实现多态
[java] view plaincopyprint?class Animal
{
void eat()
{
System.out.println("Animal eat");
}
}
class Cat extends Animal
{
void eat()//覆盖父类方法
{
System.out.println("Cat eat");
}
void catchMouse()//特有方法
{
System.out.println("Cat catchMouse");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)
a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用转成子类类型,向下转型。
Cat c=(Cat)a;//向下转型。
c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
//Animal a=new Animal();
//Cat c=(Cat)a;不行,动物不能转成猫
//对象多态的实现自始至终都是子类对象在变化
//Animal a=new Animal();这里的a是自己的对象
//Animal a=new Cat();这里的a是子类的引用
}
}
class Animal
{
void eat()
{
System.out.println("Animal eat");
}
}
class Cat extends Animal
{
void eat()//覆盖父类方法
{
System.out.println("Cat eat");
}
void catchMouse()//特有方法
{
System.out.println("Cat catchMouse");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a=new Cat();//类型提升,向上转型。(byte b=2,int x=b,b转为int型)
a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用转成子类类型,向下转型。
Cat c=(Cat)a;//向下转型。
c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型。
//我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
//多态自始至终都是子类对象在做着变化。
//Animal a=new Animal();
//Cat c=(Cat)a;不行,动物不能转成猫
//对象多态的实现自始至终都是子类对象在变化
//Animal a=new Animal();这里的a是自己的对象
//Animal a=new Cat();这里的a是子类的引用
}
}
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------