面向对象的三大特征

 面向对象的三大特征:
  1.封装:将功能细节都封装起来,使用者不用关系功能的具体实现,只需要知道这个功能是什么,怎么使用即可
              封装起来的功能可以被多次重复使用
          例如:将数组排序的功能封装到一个方法中,需要为数组排序时,直接调用该方法即可,不用关心具体如何实现
  
  2.继承:将多个类中共同的属性和方法定义在一个基类中,
            要使用这些属性和方法的类,只需要继承该基类,
            就可以直接使用基类中定义的属性和方法,不需要    
            再次定义
              提高了代码的复用率,提高了扩展率
  java中一个类只能有一个父类(单继承)
  Java中所有的类都是有父类的,如果一个类没有通过rxtends指定父类,那么默认继承自Object类
  Object类是java的根类
 继承具有传递性,B继承自A,C继承自B,那么C中也可以直接使用A中的属性和方法,通过B来继承过来
 
 
  3.多态
  一个事物可以表现成不同的形态;例如人可以表现为男人、女人。
          多态的体现:
          1.重写:父类型中某个功能不太符合子类中现有需求,子类可以重新该方法
                      例如用不同动物都吃饭,但吃饭的行为不一致,不同的动物要按照自己行为来重新实现该功能
  
                      重写确定调用哪个方法是在运行时才能确定
  
          2.重载:同一个类中某个方法需要有不同的参数列表
              
              重载在编译期就能确定要调用的方法
  
          3.父类型引用子类对象

//基类(父类、超类)superClass

class Animal{
	//共有的属性和方法
	int age;
	
	void sleep() {
		System.out.println("动物都需要休息:");
	}
}	

//Cat类是在Animal基础上进行了扩展

class Cat extends Animal{
	void work(){
		System.out.println("爱抓老鼠");
	}

重载eat方法
      
      方法名一样,参数个数不同或者对应位置的参数类型不同,属于重载
      
      返回值不作为参考条件,范围值是否相同无所谓

void eat() {
		System.out.println("自己出去找食物的流浪猫");
	}
	void eat(String food) {
		System.out.println("需要主人喂养的宠物猫");
	}

重写
         1.重写的方法的返回值类型、方法名、参数列表和父类中被重写的方法保持一致
          参数列表一致是指参数的个数,以及对应位置参数的数据类型一样即可:参数名无所谓
          
        @Override:这是一个注释,改注释作用检查方法是否重写

@Override
		void sleep() {
			System.out.println("猫白天睡觉,晚上活动");
		}
	}
Cat cat = new Cat();
		cat.age = 3;
		System.out.println(cat.age);
		cat.sleep();
		Animal animal = new Animal();
		//hashCode()方法继承自Object
		animal.hashCode();

 //如果子类重写了父类中的方法,调用时调用自己的

Cat cat = new Cat();
		//如果子类重写了父类中的方法,调用时调用自己的
	cat.sleep();

 //根据实参不同来确定要调用的重载方法

//根据实参不同来确定要调用的重载方法
		cat.eat();
		cat.eat("猫粮");

 //父类型引用子类对象

//父类型引用子类对象
		Animal animal = new Cat();
		//调用重写方法时,主要看new的对象的真实类型,例如此处真实类型为Cat
		animal.sleep();
		//如果父类和子类中定义了同名的成员变量,调用时,按照声明的类型来,例如此处声明的类型为Animal,所以调用的是Animal中的age
		System.out.println(animal.age);
		//在此处,子类中独有的方法,无法直接调用,只能使用声明类型中的方法和变量
		//animal.eat();

 //如果确实需要用到真实类型中独有的方法,我们可以通过强转类型来实现

//如果确实需要用到真实类型中独有的方法,我们可以通过强转类型来实现
Cat cat = (Cat)animal;
		System.out.println(cat.age);
		cat.eat();
		//强转类型有风险,例如animal对象的类型并不是Cat时,如果强转Cat,在运行时就会报错

 instanceof:判断对象是否是某个类型
          例如
              cat instanceof Animal 如果结果为true,说明是该类型,若为false就不是该类下
          对象 instanceof 类名 自己的真实类型以及祖先类 结果都为true 

if(animal instanceof cat) {
			//说明animal的类型为Cat
			System.out.println("animal对象类型为Cat");
			Cat cat = (Cat)animal;
			System.out.println(cat.age);
			cat.eat();
		}else {
			System.out.println("animal对象的类型不是Cat");
		}
		MyArray ma = new MyArray();
		int[] array = {1,3,4,8,7,6};
		ma.sort(array);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值