首页 > 代码库 > java面向对象基础复习

java面向对象基础复习

对java基础的一个复习总结吧。

1、继承:通过使用关键字extends,子类可以继承父类所有的方法和属性,但是无法使用 private(私有) 的方法和属性,一次只能继承一个父类。

2、重写:重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。

3、重载:重载(overload) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

4、多态:存在的三个条件

  • 继承
  • 重写
  • 父类引用指向子类对象

5、抽象类:abstract class来定义抽象类。

6、抽象方法:如果一个类包含抽象方法,那么该类必须是抽象类。

7、封装:简单的说就是成员私有,通过set和get方法来获取。

8、接口:是抽象方法的集合,接口通常以interface来声明。

  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了static和final变量。
  • 接口支持多重继承。

9、包(package):Java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类

 

自己写了一段代码来使用以上的知识点。

 

父类:animals。这是一个抽象类,因为里面声明了抽象方法eat。对于成员变量name,使用了封装的思想,声明为私有,只能通过getName和setName访问。

还有一个move方法,用于给子类重写的。

子类:Cat。实现了eat,重写了move,重载了move,新增了自己的方法sleep。

子类:Dog。实现了eat,重写了move。

以上三个类放在animals包里面。

技术分享

 

main.java:

import animals.*;

public class main {
	
	public static void main(String args[]){
		
		
		//父类指向子类引用(向上转型)
		animals cat = new Cat("cat");
		animals dog = new Dog("Dog");
		
		
		cat.eat();
		dog.eat();
		
		
		
		//重写(与父类不同)
		cat.move();
		dog.move();
		
		
		
		//cat.sleep();会报错,因为animals里面没有sleep
		//cat。move(5);会报错,因为animals里面没有重载move(int)
		
		if(cat instanceof Cat){//判断是不是Cat类的一个实例
			
			Cat newCat = (Cat)cat;//向下转型
			
			System.out.println(newCat.getName());
			newCat.sleep();
			newCat.move(5);//重载,有相同名字的函数,但是参数列表不同
			
			
			
		}
		
		
		
		
		
		
		
		
		
		
		
	}

	

}

 

animals.java

package animals;

//只能有一个公有类

//有抽象函数,所以为抽象类
public abstract class animals{
		
		private String name;//封装
		
		
		//构造函数
		animals(String name){
			
			this.name = name;
			
		}
		
		//具体的方法,由子类实现,所以定义为抽象
		public abstract void eat();
		
		//同用的方法,用于重写
		public void move(){
			
			System.out.println("动物可以移动");
			
			
		}
		
		
		//通用的方法,父类实现
		public void setName(String name){
			
			this.name = name;
			
		}
		
		public String getName(){
			
			return name;
			
		}
		
	}
	

 

Cat.java

package animals;

//猫
public class Cat extends animals{
		
		//每个类都得有自己的构造函数
		public Cat(String name) {
			super(name);
			
		}

		//因为继承了动物类,所以成员name,以及setName、getName.move都有的
		
		//因为父类是抽象类,必须实现抽象方法
		public void eat(){
			
			System.out.println("猫吃鱼");
			
		}
		
		//可以对父类存在的方法进行重写
		public void move(){
			
			//调用父类的同名函数
			super.move();
			System.out.println("猫可以跑!");
			
		}
		
		//重载
		public void move(int num){
			
			move();
			System.out.println("猫跑了"+num+"s");
			
			
		}
		
		//新增的属于自己的方法
		public void sleep(){
			
			System.out.println("Slepping!");
			
		}
		
		
		
		
}
	

 

Dog.java

package animals;



public class Dog extends animals{
	
	//每个类都得有自己的构造函数
	public Dog(String name) {
		super(name);
		
	}

	//因为继承了动物类,所以成员name,以及setName、getName.move都有的
	
	//因为父类是抽象类,必须实现抽象方法
	public void eat(){
		
		System.out.println("狗吃啥?");
		
	}
	
	//可以对父类存在的方法进行重写
	public void move(){
		
		//调用父类的同名函数
		super.move();
		System.out.println("狗也可以跑!");
		
	}
}
	

 

输出:

技术分享

 

java面向对象基础复习