day8面向对象3

final关键字:(最终的意思)

可以修饰类,变量,修饰方法
修饰类:表示是最终的类,无法继承
修饰变量:表明该变量是常量
修饰方法:表示该方法是最终方法,不能被重写

static关键字( 静态的意思)

可以修饰成员变量和成员方法

静态成员的特点
 a,被类的所有对象共享
 b,通过类名直接可以访问
 c,优先于对象存在
 d,随着类的加载而加载

非静态的成员方法

1,能访问静态的成员变量
2,能访问非静态的成员变量
3,能访问静态的成员方法
4,能访问非静态的方法

静态的成员方法

1,能访问静态的成员方法:
2,能访问静态的成员变量

静态的方法中不能存在this,super的关键字
原因:静态是随着类的加载而加载,this super这样的关键字是随着对象的创建而存在

先进内存的,是不能访问后进内存的

抽象类:

1,抽象方法和抽象类必须用abstract关键字
2,有抽象方法的类一定是抽象类
3,抽象类不能实例化
	如何实例化
	参照多态的方式,通过子类进行实例化
4,抽象类的子类
	要么重写抽象类中的所有抽象方法;
	要么子类也是抽象类

抽象类的成员特点

1,成员变量
	可是是常量,也可以是变量
2,构造方法
	有构造方法,
	用于子类访问父类的初始化
3,成员方法
	成员方法可以是抽象,也可以不是抽象的
	抽象方法---限定子类必须完成某种方法
	非成员方法:提高代码的复用性

抽象类的练习

public abstract class teacher {
	private String name;
	private int age;
	//alt + /
	public teacher(){
		
	}
	//atl+shift +s+o
	public teacher(String name,int age){
		this.name=name;
		this.age=age;
	}
	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 abstract void teach();
}
public class base extends teacher{

	@Override
	public void teach() {
		// TODO Auto-generated method stub
		System.out.println("基础班老师");	
	}
	 public base(){}
	 public base(String name,int age){
		 super(name,age);
	 }
}
public class testbase {
	public static void main(String[] args) {
		teacher t=new base();
		t.setName("呵呵");
		t.setAge(30);
		t.teach();
		
		System.out.println(t.getName()+t.getAge());
	}
}

接口

a,定义接口使用的是interface接口
b,类和接口之间是实现关系  implements 
c,接口不能实例化
		参照多态的形式使用实现类的实例化
d,接口的实现类
	要么重写接口的所有的抽象方法
	要么是一个抽象类	

多态的几种形式
具体类(几乎不用)
抽象类(常用)
接口多态(最常用)

接口的成员特点

成员变量
	:有成员变量,而且只能是常量
	public static final....

构造方法(没有构造方法)

成员方法
	接口有成员方法,而且都是抽象的
	默认修饰符:public abstract

类与类 类与接口 接口与接口

类与类:(extends)
		继承关系,只能单继承,可以多层继承
类与接口:(implement)
		实现关系,可以单实现,也可以多实现
		还可以在继承一个类的同时  实现多个接口
接口与接口(extends)
		继承关系,可以单继承,也可以多继承

抽象类和接口的区别

1,成员区别:
抽象类:
成员变量:可以是变量和常量
构造方法:有
成员方法:可以是抽象方法,也可以是非抽象方法
接口:
成员变量:只能是常量
成员方法:只能是抽象方法
2,关系区别
类与类:继承关系,只能单继承,可以多层继承
类与接口:实现关系,可以单实现,也可以多实现
接口与接口:继承关系,可以单继承,也可以多继承
3,设计理念
抽象类 is a(定义的是继承体系的共性功能)
接口类 like a(定义该体系的扩展功能)

接口的练习

public interface english {
	public abstract void english();
}
public abstract class person {
	private String name;
	private int age;	
	public person(){		
	}
	public person(String name,int age){
		this.name=name;
		this.age=age;
	}
	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 abstract void eat();
}
public abstract class player extends person  {
	public player(){
		
	}
	public player(String name ,int age){
		super(name,age);
	}
	
	public abstract void study();
}
	public abstract class jiaolian extends person {
	public jiaolian(){
		
	}
	public jiaolian(String name,int age){
		super(name,age);
	}
	public abstract void teach();
}
public class pp extends player implements english {
	public pp() {
	}
	public pp(String name, int age) {
		super(name, age);
	}
	@Override
	public void english() {
		System.out.println("乒乓球运动员说英语");
	}
	@Override
	public void study() {
		System.out.println("乒乓球运动员学习如何发球个接球");

	}
	@Override
	public void eat() {
		System.out.println("乒乓球运动员吃牛肉");
	}
}
public class ppjiaolian extends jiaolian implements english{
	public ppjiaolian(){		
	}
	public ppjiaolian(String name ,int age){
		super();
	}	
	@Override
	public void teach() {
		System.out.println("乒乓球教练吃的好");		
	}
	@Override
	public void eat() {
		System.out.println("乒乓球教练吃牛肉");		
	}
	@Override
	public void english() {
		System.out.println("乒乓球教练说英语");		
	}
}
public class test1 {
	public static void main(String[] args) {
		pp p=new pp("张继科",30);
		System.out.println(p.getName()+p.getAge());
		p.eat();
		p.study();
		p.english();		
	}
}

包的概念

包的概念

包就是文件夹
作用:对类进行分类管理
包的定义:
package 包名
如果是多级的包,隔离即可
注意:
1,包必须是第一条执行语句
2,在一个java文件中只能有一个

导包

import 包名;

四种权限修饰符

在这里插入图片描述
java 转型问题其实并不复bai杂,只要记住一句话:父类du引用指向子类对象。zhi
什么叫父类引用指dao向子类对象,且听我慢慢道来.
从2个名词开始说起:向上转型(upcasting) 、向下转型(downcasting).
举个例子:有2个类,Father是父类,Son类继承自Father。
Father f1 = new Son(); // 这就叫 upcasting (向上转型)
// 现在f1引用指向一个Son对象
Son s1 = (Son)f1; // 这就叫 downcasting (向下转型)
// 现在f1还是指向Son对象
第2个例子:
Father f2 = new Father();
Son s2 = (Son)f2; // 出错,子类引用不能指向父类对象
你或许会问,第1个例子中:Son s1 = (Son)f1;问什么 是正确的呢。
很简单因为f1指向一个子类对象,Father f1 = new Son(); 子类s1引用当然可以指向子类对象了。
而f2 被传给了一个Father对象,Father f2 = new Father();子类s1引用不能指向父类对象。
总结:
1。父类引用指向子类对象,而子类引用不能指向父类对象。
2。把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换。
如:Father f1 = new Son();
3。把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换。
如:f1 就是一个指向子类对象的父类引用。把f1赋给子类引用s1即 Son s1 = (Son)f1;
其中f1前面的(Son)必须加上,进行强制转换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值