JAVA学习笔记:JAVA中面向对象编程(面向对象编程三大特征:封装、继承和多态)

1、概述
java的编程语言是面向对象的,面向对象编程(Object-Oriented Programming)简称OOP
java面向对象编程的三大特征:封装、继承、多态
1)封装
2)继承
3多态

2、封装Encapsulation
1)隐藏代码的实现细节
2)统一用户的调用接口
3)t提高系统的可维护性

例如:

	//set负责给属性赋值
	//get负责返回属性的值
	public class Student{
		private String name;
		public void setName(String name){
			this.name = name;
		}
		public String getName(){
			return this.name;
		}
	}

	public class Test{
		public static void main(String[] args){
			Student s = new Student();
			s.setName("tom");
			System.out.println(s.getName());
		}
	}

2、继承Inheritance
关键字extends
1)类与类之间的关系:继承、依赖、组合、聚合等
继承是类与类之间的一种关系
2)A类继承B类;A类为子类(派生类),B类为父类(基类)
子类 Subclass 父类superclass

	例如:public class A extends B{
	}

3)类与类之间的继承是单继承;即一个子类只能直接继承一个父类,一个子类只能有一个直接父类;但一个父类可以被多个子类继承

注:接口与接口的继承是多继承,即一个子接口可以继承多个父接口
Object类是所有类的父类,所有类都有直接或间接继承Object类
构造器不能被继承;方法和属性可以被继承(private修饰的可以被继承但是不能直接使用)。
子类继承父类默认调用父类无参构造器,所以自己定义构造器要定义一个有参一个无参构造器。
无参构造器:

		public 类名() {
	 		 super(父类有参构造器的参数);
	  }

有参构造器第一行代码默认为super()
子类创建对象前,一定先调用父类构造器,

3、多态Polymorphism
不同类的对象对同一消息做出响应,可能有不同的结果
类的多态的前提:继承,重写,父类的引用指向子类对象
相同类域的不同对象,调用相同的方法,执行结果是不同的
1)一个父类引用可以指向任何子类对象
例如:Studnet类和Teacher继承Person类

Person  p=null;
p=new Student();
p=new Teacher();
p=new Person();

2)一个子类对象可以由多个引用指向

	例如:
	Student s=new Student();
	Person p=new Student();
	Object o=new Student();

3)多态的方法调用
注:子类继承父类,调用a方法,如果a方法在子类中没有重写,那么就是调用的是子类继承父类的a方法,如果重写了,那么调用的就是重写之后的方法。
这个的前提是父类引用指向子类对象,如果是子类自己的引用指向自己的对象,调用的方法也只是子类字节的方法

例如:

	public class Person{
		public void run(){}
	}
	public class Student extends Person{

	}
	//调用到的run方法,是Student从Person继承过来的run方法
	main:
		Person p = new Student();
		p.run();


	例如:
	public class Person{
		public void run(){}
	}
	public class Student extends Person{
		public void run(){
			//重写run方法
		}
	}
	//调用到的run方法,是Student中重写的run方法
	main:
		Person p = new Student();
		p.run();

3)子类独有的方法
一个引用调用方法,看的是定义的引用的类中有没有这个方法,有编译通过否则报错;不是看引用所指的对象的类中有没有这个方法
即父类引用指向子类对象,无法调用子类独有的方法,要想调用子类独有的方法,必须改成子类自己的引用指向对象

	例如:
	public class Person{
		public void run(){}
	}
	public class Student extends Person{
		public void test(){
		}
	}
	main:
		Person p = new Student();
		//调用到继承的run方法
		p.run();
		
		//编译报错,因为编译器检查变量p的类型是Person,但是在Person类中并没有发现test方法,所以编译报错.
		p.test();

4)子类引用和父类引用的区别
Student s = new Student();
Person p = new Student();
s可以调用Student类中的所有方法包括从Person类中继承的方法
p可以调用的是Person类中有的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值