java面向对象

抽象类

继承

package demo;
//用到继承,一切不变只是类借过来看做他的类,不混淆
/*super:
 * 		通过super,可以访问父类构造方法
 * 			调用构造方法的代码,必须写在子类构造方法的第一行
 * 		通过super,可以访问父类的属性
 * 		通过super,可以访问父类的方法
 * 		
*/
public class Demo2 {

	public static void main(String[] args) {
		
		Student2 s = new Student2();
		//s.setName("d");
		//s.setAge(11);
		s.say();
		
	}

}
//人类
class Person2 {
	//封装对属性私有化
	private String name;
	private int age;
	public String sex;
	
	//无参构造方法Shift+A/t+s
	public Person2() {
		super();
		// TODO Auto-generated constructor stub
	}
	//实参构造方法Shift+A/t+s
	public Person2(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	//对外提供公开的set get 方法Shift+A/t+s
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void say() {
		System.out.println("我是"+name+",我今年"+age);
	}
}
//学生的类    用super进行与父类交互
class Student2 extends Person2{
	public Student2() {
		super("无姓名",1);//构造没有构造没有值
		super.sex="男";
		super.setName("haha");//子类中super表示自动被创建的父类对象
	}
	
}

测试demo

package demo1;
//抽象类不能创建对象
//抽象类不能使用final声明
//抽象类能有构造方法java虚拟机创建
//抽象类普通类区别:
//1抽象类必须用public或protected修饰(如果private修饰,子类无法继承,无法实现其抽象方法)默认为缺省public
//2抽象类不可以使用new关键字创建对象,但是子类创建时,抽象父类也会被jvm实例化
//3如果一个子类继承抽象方法,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必须定义为abstract类

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Student s = new Student();
		//s.say();
		//Nurse n = new Nurse();
		//n.say();
		//Person p = new Person();
		
		/*//父类引用指向子类对象
		//p对象
		Person p = null;
		//s对象
		Student s = new Student();
		p = s;//学生是人,或者理解地址指向学生  p就是指向s 即多态
		p.say();//p  Person类型但具体指向内容是类的子形态 子形态*/
		
		Student a = new Student();
		Nurse b = new Nurse();
		
		Person p1 = a;//学生的人
		Person p2 = b;//护士的人
		p1.say();//正常
		p2.say();//正常
		
		Student a2 = (Student)p1;//学生的人的学生;变回学生,父类变子类强转
		//Student a3 = (Student)p2;//护士的人的学生,运行的时候say的时候出错
		a2.say();
		//a3.say();
		
		
	}

}

抽象父类

package demo1;
//抽象人类
public abstract class Person {
	public Person() {//抽象类的构造方法,jvm生成的
		System.out.println("构造方法执行了");
	}
	int age;//抽象父类可以有确定的
	public abstract void say();//抽象类不确定的
}

抽象继承的子类

package demo1;
//子类学生
public class Student extends Person {
	
	public void say() {
		System.out.println("学习"+age);
	}
}


接口

package interfac;

public class Demo {

	public static void main(String[] args) {
		/*//接口
		Student s = new Student();
		s.say();*/
		
		//多态应用
		/*Student s= new Student();
		say(s);*/
		Nurse n = new Nurse();
		say(n);
		
	}
	//多态应用
	public static void say(Person p) {
		p.say();//多态传
	}
}

Person

package interfac;
//接口
public interface Person {
	//public void say();//可以省略public
	void say();
	//public static final int a = 10;//可以省略public static final
	int a = 10;//加粗常量
}
package interfac;

public class Nurse implements Person{

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("后续增加的say,来自护士、");
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值