Java学习日志 (Day 3 面向对象之封装、继承)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/besonn/article/details/100021088

1、面向对象概念
面向过程和面向对象编程思想的区别?
“万物皆对象”,对象包含属性和行为。
面向对象的三大特征:封装、继承、多态

类(class):类是对一类事物描述,是抽象的、概念上的定义。

对象(object):对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
类不占内存,对象才占内存。
a、类
语法:
[修饰符] class 类名{
//属性,即成员变量

//行为,即成员方法

}
例:

public class Person {
				//属性
				String name;	//姓名
				char sex;		//性别
				int age;		//年龄
				//方法(行为)
				public void sleep(){
					System.out.println("睡觉~~~");
				}
				public void eat(){
					System.out.println("吃饭~~~");
				}
			}

注意:刚开始,每个.java中只包含一个类。普通类中没有main()。
步骤:
1)起类名:class 类名{};
2)写两个注释:属性、行为;
3)在属性中编写一些变量(类本身的属性)的声明代码,并对每个变量进行注释;
4)在行为中编写一些方法(该类本身具有的行为),并对每个方法进行注释。
b、对象的创建

例:

Person zhangsan = new Person();		//构造方法
			zhangsan.name = "张三";
			zhangsan.sex = 'm';
			zhangsan.age = 20;
			zhangsan.eat();
			zhangsan.sleep();
			System.out.println(zhangsan.name+","+zhangsan.sex+","+zhangsan.age);

注意:对象属性和行为的调用使用“对象名.属性名”

2、封装

a、意义:使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据
的错误、混乱或安全性问题。此时使用封装。

b、封装的步骤(初学):

1)私有化成员变量;(private)
2)给私有变量设置set、get方法;(public)
3)在set、get方法中添加安全判断条件;
c、举例:

public class Cat {
		//属性
		private String name="tom";	//名字
		private int leg=4;		//腿
	
//get方法
		public int getLeg(){
		return leg;
		}
		public String getName(String pwd){
		if(pwd.equals("123")){ // equals()返回内容是否相等
			return name;
		}else{
			return "";
			}
		}
		//set方法
		public void setLeg(int leg){
		if(leg>4 || leg<0){
			System.out.println("神经病~~~");
			return;
		}
		this.leg = leg;
		}
		//行为
		public static void eat(){
		System.out.println("吃鱼~~~");
		}
		public static void job(){
		System.out.println("抓老鼠~~~");
		}
		}

使用技巧:eclipse可自动生成set、get方法。
d、this指针
意义:this指的是对象本身,而不是类。
注意:如果局部变量与成员变量同名,则成员变量失去作用。
使用场景:当形参和成员变量重名的时候,为了区分形参和成员变量。
例:
public void setSex(char sex) {
this.sex = sex;
}

e、实体类:只包含private成员和对应的set、get方法的类(不包含其它方法)。
作用:类似于C/C++中的结构体,主要用来存储数据和传递数据用。
f、构造方法
作用:主要用来初始成员变量的值。
注意:JVM会自动给每个类创建一个无参的构造方法直到程序员显示的写出了构造方法,JVM就不再自动创建构造方法了。
特点:1)方法名与类名相同;
2)没有任何返回值类型;也不是void.
构造方法重载:?
例:

public student(){
			}
			public student(String name, int age, char sex){
				this.name = name;
				this.age = age;
				this.sex = sex;
			}
	构造方法的调用:
		例:student studenti = new student("张三"+i,18,'m');

对封装的赋值只能在main函数中进行
3、继承
a、概念
父类(基类、超类)、子类(派生类、扩展类)
b、意义:主要是为了防止代码的重复编写,将具有相同特性的类其重复代码放到父类中编写,子类继承父类即可使用这些代码。
c、举例:

public class Animal {
			//属性
			String name;	//名字
			String color;	//颜色
			int leg;		//腿
			//行为
			public void eat(){
				System.out.println("吃东西~~~");
			}
		}
		public class Cat extends Animal {
		}
		public class Dog extends Animal {
		}

d、注意:java中只允许单继承,即一个子类只能有一个父类,但是一个父类可以派生多个子类。子类也可以有子类。默认情况下,java中所有类的父类都是Object类。
e、访问控制修饰符
private:只能在本类中使用。
缺省:类本身、同一个包中的类。其它包的子类无法调用。
protected:受保护的,子类可以继承,同一个包中的其它类可以使用,其它包中的类(除了子类)无法调用。
public:任何地方都能调用。

猜你喜欢

转载自blog.csdn.net/besonn/article/details/100021088